灌水唠嗑区
技术分享
文章
如何在实际应用中选择使用GROUP BY和HAVING?
发表于2026-05-01 09:13:4711次浏览5个评论
一、先记判断口诀
只要需要合并、统计、分组 → 必用
GROUP BY比如:按部门、按日期、按渠道、按省份统计人数、金额、订单数。过滤条件里有聚合函数(count/sum/avg) → 只能用
HAVING过滤普通字段、行数据 → 用
WHERE,不要放 HAVING
二、实际应用选择规则
1. 什么时候必须用 GROUP BY
满足任意一条就用:
要按某个维度归类:按天、按月、按用户、按地区、按部门
SQL 里用了 count、sum、avg、max、min 聚合,且要按字段分组展示
要把重复值合并成一条汇总数据
2. 什么时候必须用 HAVING
满足任意一条就用:
要对分组后的统计结果再筛选例:只查出订单数大于 100、总金额大于 1 万的分组
过滤条件里包含聚合函数,写在 WHERE 会直接报错
3. 坚决别把普通条件放 HAVING
普通字段过滤(时间、状态、性别)一律用 WHERE原因:
WHERE 先过滤,减少参与分组的数据量,性能高
HAVING 是分完组再过滤,扫的数据更多,性能差
三、实战标准模板(工作直接照写)
业务需求:统计每个部门人数,只保留人数≥3 的部门,且只查在职员工
sql
SELECT dept_id, COUNT(*) AS cnt
FROM employee
WHERE status = '在职' -- 先筛原始行:普通条件放WHERE
GROUP BY dept_id -- 按部门分组统计
HAVING COUNT(*) >= 3; -- 筛分组结果:聚合条件放HAVING
四、一句话总结怎么选
要归类统计 → 上
GROUP BY筛原始行、普通字段 → 用
WHERE筛分组后的聚合结果 → 用
HAVING能写 WHERE 绝不扔到 HAVING,性能差距很大。
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17529