SQL 基础 / 7 min
GROUP BY:把多行合成一行
聚合的核心是“按什么分组”和“每组算什么”。
GROUP BYcountsum
聚合先问两个问题
写 GROUP BY 前,先问:
- 按什么分组?
- 每组算什么指标?
比如“每个城市有多少用户”:
SELECT city, count(*) AS user_count
FROM users
GROUP BY city;
city 是分组维度,count(*) 是每组指标。
常见聚合函数
count(*) -- 行数
sum(amount) -- 总和
avg(amount) -- 平均值
max(amount) -- 最大值
min(amount) -- 最小值
SELECT 里能放什么
用了 GROUP BY 后,SELECT 里通常只能放:
- 分组字段
- 聚合函数
比如下面这条就容易出错,因为 name 既不是分组字段,也不是聚合结果:
SELECT city, name, count(*)
FROM users
GROUP BY city;
WHERE 和 HAVING
WHERE 在分组前过滤行,HAVING 在分组后过滤组。
SELECT city, count(*) AS user_count
FROM users
GROUP BY city
HAVING count(*) >= 2;