SQL分组统计核心是GROUP BY搭配聚合函数,关键在于明确“按什么分”“算什么”“怎么过滤”;需注意非聚合字段必须出现在GROUP BY中,WHERE用于分组前行过滤,HAVING用于分组后组过滤,支持多字段联合分组及NULL值处理,结果可排序和限制输出。

SQL分组统计核心就一条:用 GROUP BY 搭配聚合函数(如 COUNT、SUM、AVG、MAX、MIN),把数据按指定字段“归堆”,再对每堆算一个汇总值。关键不是语法多难,而是搞清“按什么分”“算什么”“怎么过滤”这三步逻辑。
一、基础写法:先分组,再聚合
分组统计必须出现在 SELECT 子句中,且所有非聚合字段都得出现在 GROUP BY 后面。否则数据库会报错(比如 MySQL 严格模式下)。
- 正确写法:SELECT department, COUNT(*) FROM employees GROUP BY department;
- 错误写法:SELECT department, name, COUNT(*) FROM employees GROUP BY department;(name 不在 GROUP BY 中,也没聚合,非法)
二、带条件的分组:WHERE 和 HAVING 别混用
WHERE 在分组前筛选原始行(比如只统计在职员工);HAVING 在分组后筛选分组结果(比如只看人数超5人的部门)。
- WHERE 过滤的是“行”,HAVING 过滤的是“组”
- HAVING 后可直接用聚合函数,WHERE 不可以(比如 HAVING AVG(salary) > 8000 是合法的,WHERE AVG(salary) > 8000 会报错)
- 典型组合:SELECT dept, AVG(salary) FROM emp WHERE status = 'active' GROUP BY dept HAVING COUNT(*) >= 3;
三、多字段分组 & 空值处理要留心
按多个字段分组时,GROUP BY 后写逗号分隔的字段,代表“联合分组”。比如按部门+岗位统计人数,相同部门和相同岗位才归为一组。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~