SQL分组后筛选怎么写_HAVING使用场景详解【教学】

#技术教程 发布时间: 2025-12-20
SQL分组后筛选必须用HAVING而非WHERE,因为WHERE在分组前执行,无法识别COUNT()等聚合函数结果;HAVING在GROUP BY之后执行,可基于聚合值过滤分组。

SQL分组后筛选要用 HAVING,不能用 WHERE。因为 WHERE 在分组前过滤数据,HAVING 才是在 GROUP BY 之后对分组结果做条件筛选。

为什么不能用 WHERE 筛选分组结果

WHERE 是在数据分组前执行的,它无法识别聚合函数(如 COUNT()、SUM()、AVG() 等)的结果。比如你想查“订单数超过 5 的客户”,COUNT(*) 是每个分组算出来的,WHERE 根本看不到这个值。

错误写法(会报错):

SELECT customer_id, COUNT(*) FROM orders WHERE COUNT(*) > 5 GROUP BY customer_id;

正确逻辑:先 GROUP BY → 再计算每组的 COUNT(*) → 最后用 HAVING 过滤这些统计值。

HAVING 的基本写法和关键规则

HAVING 必须跟在 GROUP BY 后面(如果有 GROUP BY),可以单独使用,也可以和 WHERE 一起用(WHERE 先过滤行,GROUP BY 分组,HAVING 再过滤组)。

  • HAVING 后的条件可以是聚合函数,比如 HAVING COUNT(*) >= 3
  • 也可以是分组字段,比如 HAVING MAX(amount) > 1000
  • 支持 AND/OR/NOT 组合多个条件,例如 HAVING AVG(score) >= 85 AND COUNT(*) > 10
  • 注意:SELECT 中出现的非聚合字段,必须出现在 GROUP BY 中,否则多数数据库会报错(如 MySQL 严格模式、PostgreSQL)

常见实战场景举例

场景1:找出买了至少 3 种商品的客户

SELECT customer_id, COUNT(DISTINCT product_id) AS product_count
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) >= 3;

场景2:筛选平均消费超 500 元且下单次数不少于 2 次的会员

SELECT member_id, AVG(total_amount) AS avg_spend, COUNT(*) AS order_cnt
FROM orders
WHERE status = 'completed' -- 先排除取消单
GROUP BY member_id
HAVING AVG(total_amount) > 500 AND COUNT(*) >= 2;

场景3:查看哪些部门的员工平均薪资高于公司整体平均值

SELECT dept, AVG(salary) AS dept_avg
FROM employees
GROUP BY dept
HAVING AVG(salary) > (SELECT AVG(salary) FROM employees);

HAVING 和 WHERE 的执行顺序要记牢

一条含 GROUP BY 和 HAVING 的查询,实际执行顺序是:

  • FROM → 找表
  • WHERE → 先筛原始行(不能用聚合)
  • GROUP BY → 分组
  • HAVING → 筛分组(能用聚合)
  • SELECT → 选字段(含聚合或分组字段)
  • ORDER BY → 排序(可基于 SELECT 中的别名)

记住了这个顺序,就不会混淆 WHERE 和 HAVING 该放哪、能写什么了。




上一篇 : 如何在mysql中使用where条件_mysql where条件用法解析

下一篇 : mysql如何验证备份是否可用_mysql备份有效性检查

推荐阅读

电话:400 76543 55
邮箱:915688610@qq.com
品牌营销
客服微信
搜索营销
公众号
©  丽景创新 版权所有 赣ICP备2024032158号 
宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 恩施州毯滚百货有限公司 恩施州毯滚百货有限公司 襄阳市蜂欢商贸有限公司 襄阳市蜂欢商贸有限公司 恩施州换冯百货有限公司 恩施州换冯百货有限公司 恩施州健提百货有限公司 恩施州健提百货有限公司 西安益零商贸有限公司 西安益零商贸有限公司 南奥教育 南奥教育 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南奥教育网 南奥教育网 南奥教育网 南奥教育网 南奥学习网 南奥学习网 南奥学习网 南奥学习网 南奥教育 南奥教育 南奥留学记 南奥留学记 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 广照天下广告 广照天下广告 广照天下广告策划 广照天下广告策划 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下广告策划 广照天下广告策划 广照天下广告策划 广照天下广告策划 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案