本文概述
- group by子句
- having子句
- 聚合函数
- 比较SQL中的Have和Where子句
- GROUP BY with JOIN示例
- GROUP BY与其他子句的比较
- 动手实践作业
- 总结
将数据分组后, 可以使用HAVING子句过滤分组的记录。 HAVING子句返回与给定条件匹配的分组记录。你还可以使用ORDER BY对分组的记录进行排序。 ORDER BY在聚集列的GROUP BY之后使用。
在本教程中, 你将通过相关示例详细学习GROUP BY子句。这是你将在本教程中学习的主题列表:
- group by子句
- having子句
- 聚合函数
- 比较SQL中的Have和Where子句
- GROUP BY with JOIN示例
- GROUP BY与其他子句的比较
- 动手实践作业
- 总结
- 在拆分阶段, 它用其值划分组。
- 在应用阶段, 它应用聚合函数并生成单个值。
- 在组合器阶段, 它将具有单个值的组组合为单个值。
文章图片
图片来源
要记住的要点:
- GROUP BY子句与SELECT语句一起使用。
- GROUP BY根据所选列聚合结果:COUNT, MAX, MIN, SUM, AVG等。
- GROUP BY每一组数据仅返回一个结果。
- GROUP BY子句始终遵循WHERE子句。
- GROUP BY子句始终位于ORDER BY子句之前。
文章图片
在上面的示例中, 表是根据DeptID列进行分组的, 而薪水是按部门聚合的。
having子句 在SQL中, HAVING子句与GROUP BY子句一起用作条件子句。此条件子句返回的行中聚合函数结果仅与给定条件匹配。它是在SQL中添加的, 因为WHERE子句无法与聚合结果结合使用, 因此它具有不同的用途。 WHERE子句的主要目的是处理非聚合或单个记录。
- HAVING子句始终与GROUP BY子句结合使用。
- HAVING子句限制组记录而不是单个记录上的数据。
- WHERE和HAVING可以在单个查询中使用。
文章图片
在上面的示例中, 根据DeptID列对表进行分组, 并使用条件为AVG(Salary)> 3000的HAVING子句对这些分组的行进行过滤。
聚合函数 用于将组的结果合并为单个的聚合函数, 例如COUNT, MAX, MIN, AVG, SUM, STDDEV和VARIANCE。这些功能也称为多行功能。
- SUM():返回每个组的总和。
- COUNT():返回每个组的行数。
- AVG():返回每个组的平均值和均值。
- MIN():返回每个组的最小值。
- MAX():返回每个组的最小值。
- 在某些情况下, 你需要过滤掉各个记录。在这种情况下, 你可以使用WHERE子句, 而在其他情况下, 则需要使用特定条件过滤组。在这种情况下, 你可以使用HAVING子句。
- WHERE子句按元组过滤记录元组, 而HAVING子句则过滤整个组。
- 查询可能同时具有这两个子句(WHERE和HAVING子句)。
- 子句首先适用于何处, 然后适用具having子句。
- WHERE子句限制记录在GROUP BY子句之前, 而HAVING子句限制在GROUP BY子句之后的记录。
- WHERE子句可与SELECT, UPDATE, DELETE和INSERT一起使用, 而HAVING仅可与SELECT语句一起使用。
文章图片
图片来源
GROUP BY with JOIN示例 规范化的关系数据库将复杂的表分解为小表, 这可以帮助你消除数据冗余, 不一致并确保没有信息丢失。规范化表需要联接来自多个表的数据。
文章图片
在上面的示例中, 使用公共列DeptID将Employee和Department连接在一起。
文章图片
在上面的示例中, JOIN和GROUP BY这两个子句在单个查询中一起使用。联接两个表(雇员表和部门表)后, 按部门名称分组表。
GROUP BY与其他子句的比较 比较GROUP BY和DISTINCT
DISTINCT返回列中存在的唯一值, 而GROUP BY返回包含合计结果列的唯一/不同项。在以下示例中, 你可以在dept表中看到DISTINCT值。
文章图片
比较GROUP BY和ORDER BY
ORDER BY返回按升序和降序排序的项目, 而GROUP BY返回具有合计结果列的唯一项目。在下面的示例中, 你可以看到ORDER BY或排序的薪水表。
文章图片
动手实践作业 表名:书籍
栏:ISBN, 标题, 出版日期, 价格, 出版商
为以下语句编写SQL查询, 并在注释中分享你的答案:
- 确定每个类别中有几本书。
- 确定” 管理” 类别中有几本书。
- 确定每个类别的平均图书价格。
- 列出每个类别中最便宜的书的价格。
总结 恭喜, 你已完成本教程的结尾!
在本教程中, 你涵盖了有关GROUP BY和HAVING子句的许多详细信息。你已经了解了示例的GROUP BY和HAVING子句, SQL中的HAVING和WHERE子句比较, JOIN的GROUP BY和DISTINCT和ORDER BY的GROUP BY比较。在上一节中, 你将有一个动手实践作业来评估你的知识。
希望你现在可以利用GROUP BY和HAVING子句概念来分析自己的数据集。感谢你阅读本教程!
【SQL中的GROUP BY和HAVING子句】如果你想了解有关SQL的更多信息, 请参加srcmini的中级SQL课程。
推荐阅读
- Python中的模糊字符串匹配
- SQL教程(如何编写更好的查询语句)
- Python机器学习(Scikit-Learn教程)
- Python因子分析简介
- SQL连接查询机制和使用全面剖析
- xp系统qq空间上传照片失败的处理办法
- xp系统下加速收看网络视频节目的办法
- xp系统下如何设置Excel只复制数值不复制公式
- win xp系统打开不了快牙软件是怎样回事