GROUP BY 分组
GROUP BY 子句用于将查询结果按一个或多个列进行分组,通常与聚合函数一起使用。本章将详细介绍 GROUP BY 的使用方法。
基本语法
简单分组
结果:
与聚合函数配合
COUNT - 计数
SUM - 求和
AVG - 平均值
MAX/MIN - 最大/最小值
多列分组
结果:
HAVING 子句
HAVING 用于过滤分组后的结果(WHERE 用于过滤分组前的行)。
基本用法
WHERE vs HAVING
执行顺序:
- FROM - 选择表
- WHERE - 过滤行
- GROUP BY - 分组
- HAVING - 过滤分组
- SELECT - 选择列
- ORDER BY - 排序
多个聚合函数
按表达式分组
GROUP_CONCAT(MySQL)
WITH ROLLUP
实战示例
示例 1:销售统计
示例 2:用户行为分析
示例 3:商品分类统计
示例 4:时间段分析
常见错误
错误 1:SELECT 中包含非分组列
错误 2:WHERE 中使用聚合函数
错误 3:混淆 WHERE 和 HAVING
性能优化
1. 为分组列创建索引
2. 先过滤再分组
3. 使用覆盖索引
高级用法
条件聚合
多维分组
最佳实践
- 只在 SELECT 中使用分组列或聚合函数
- 使用 WHERE 过滤行,使用 HAVING 过滤分组
- 为分组列创建索引
- 先过滤再分组以提高性能
- 使用有意义的别名
小结
- GROUP BY:按列分组数据
- 聚合函数:COUNT、SUM、AVG、MAX、MIN
- HAVING:过滤分组后的结果
- 多列分组:按多个列分组
- 性能优化:创建索引、先过滤再分组
下一步: 学习 ALTER 修改表