GROUP BY 分组查询
掌握分组统计、多列分组、聚合函数配合
GROUP BY 分组查询
聚合函数把多行变成一行。GROUP BY 告诉它"按什么分组聚合"——比如"每个城市的平均年龄"。
学完本章你将: 掌握单列/多列分组、分组+聚合、执行顺序。
基本分组
sql
-- 每个城市的用户数量
SELECT city, COUNT(*) AS 人数
FROM users
GROUP BY city;
多列分组
sql
-- 每个城市 + 年龄组合的人数
SELECT city, age, COUNT(*) AS 人数
FROM users
GROUP BY city, age;
-- 北京 20 岁的人数、北京 21 岁的人数...
和 WHERE 配合
sql
-- 先过滤,再分组
SELECT city, AVG(age) AS 平均年龄
FROM users
WHERE age > 18 -- WHERE 在 GROUP BY 前(过滤原始行)
GROUP BY city;
SQL 执行顺序
理解这个顺序才能写出正确查询:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
① ② ③ ④ ⑤ ⑥
- WHERE 过滤的是原始行(分组前)
- HAVING 过滤的是分组后的结果(下一章详讲)
- GROUP BY 的列必须出现在 SELECT 中(聚合列除外)