用一个简单的奶茶店销售表来说明:

原始数据tea_sales

dateshopdrinkamount
0301北京店奶茶3
0301北京店咖啡2
0301上海店奶茶5
0301上海店咖啡1
0302北京店奶茶4
0302北京店咖啡6
0302上海店奶茶2
0302上海店咖啡3

1. GROUP BY 一个字段

SELECT date, SUM(amount) AS total
FROM tea_sales
GROUP BY date
datetotal
030111
030215

把所有行按合并,每天一行

2. GROUP BY 两个字段

SELECT date, shop, SUM(amount) AS total
FROM tea_sales
GROUP BY date, shop
dateshoptotal
0301北京店5
0301上海店6
0302北京店10
0302上海店5

(天, 店) 组合合并,每个组合一行。只有两个字段都一样才合并。

3. GROUP BY 三个字段

SELECT date, shop, drink, SUM(amount) AS total
FROM tea_sales
GROUP BY date, shop, drink
dateshopdrinktotal
0301北京店奶茶3
0301北京店咖啡2
0301上海店奶茶5
0301上海店咖啡1
0302北京店奶茶4
0302北京店咖啡6
0302上海店奶茶2
0302上海店咖啡3

(天, 店, 饮品) 组合合并,和原始数据一样了(因为每个组合本来就只有一行)

核心理解

GROUP BY A       → A 相同的行合成一组
GROUP BY A, B    → A和B 都相同的行合成一组
GROUP BY A, B, C → A、B、C 都相同的行合成一组

字段越多,分组越细,结果行数越多。就像:

  • 看 → 粗粒度
  • 天 + 店看 → 中粒度
  • 天 + 店 + 饮品看 → 细粒度

更新: 2026-03-06 11:29:10
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/gb23vkikcohc0wv1


相关笔记