SQL分组统计需严格遵循四步逻辑:先用WHERE筛选原始行(仅支持原始字段),再用GROUP BY划分数据组(非聚合列须全部列出),接着用HAVING筛选组结果(可使用聚合函数),最后用聚合函数与ORDER BY汇总排序。

SQL分组统计不是“写个GROUP BY就完事”,而是一套有严格执行顺序、明确语义边界和常见陷阱的逻辑体系。掌握它,关键在理清“谁先筛、谁归组、谁后筛、谁来汇总”这四步关系。
分组前:用WHERE筛选原始行
WHERE是第一道过滤关,作用于分组之前,只能使用原始字段,不能用AVG、COUNT这类聚合函数。
- 比如查“2024年入职的员工”,写 WHERE hire_date >= '2024-01-01'
- 如果误写成 WHERE AVG(sal) > 5000,直接报错——因为此时还没分组,更没算出平均值
- 它决定“哪些人能进组”,不参与后续分组计算
分组中:用GROUP BY划定数据块
GROUP BY按指定列值把行聚合成一个个逻辑组,每组对应SELECT中一个结果行。
- 分组列必须出现在SELECT列表中(除非被聚合函数包裹)
- 多字段分组如 GROUP BY deptno, job,表示先按部门再按职位细分
- NULL值会被单独归为一组(不是被忽略),如需合并处理可用 COALESCE(deptno, 0)
- SELECT里所有非聚合列,都得在GROUP BY中完整列出,否则语法报错
分组后:用HAVING筛选组结果
HAVING是第二道过滤关,作用于分组完成、聚合计算之后,可安全使用AVG、COUNT等函数。
标签: 聚合函数
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~