本章介绍如何分组数据,以便汇总表内容的子集。两个新的SELECT语句子句:GROUP BY子句和HAVING子句
- 创建分组
-
GROUP BY子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制
-
如果在GROUP BY子句中嵌套了分组,数据将在最后的分组上进行汇总
-
GROUP BY子句列出的列必须是检索列/有效的,不能使用别名(把取别名的完整表达式替换过来)
-
NULL 也算一个分组,多个NULL将合并成一组
-
GROUP BY子句必须出现在WHERE之后,ORDER BY之前
-
过滤分组
如上所示的例子,将过滤COUNT(*) >= 2的那些分组,这里WHERE子句不起作用的原因是过滤是基于分组聚集而不是特定的行值。
也就是说WHERE在分组之前进行过滤,HAVING在分组之后进行过滤
-
分组和排序
GROUP BY 和 ORDER BY是存在不同的,如下
-
SELECT子句顺序
子句 说明 是否必要 SELECT 后跟要返回的列或表达式 是 FROM 后跟 从中检索数据的表 仅在从表中选择数据时使用 WHERE 行级过滤 否 GROUP BY 分组说明 仅在按组计算聚集时使用 HAVING 组级过滤 否 ORDER BY 输出的排序顺序 否 LIMIT 限制要检索的行数 否