SQL中HAVING子句怎么用?有哪些常见使用实例?

来源:我的博客作者:北京网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《SQL中HAVING子句怎么用?有哪些常见使用实例?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SQL中HAVING子句怎么用?有哪些常见使用实例?》有用,将其分享出去将是对创作者最好的鼓励。

SQL中的HAVING子句是数据查询中常用的筛选工具,它主要配合GROUP BY子句使用,用来对分组后的结果集进行条件过滤,和WHERE子句的作用场景有明显区别。

SQL中HAVING子句怎么用?有哪些常见使用实例?

HAVING子句基本语法

HAVING子句通常跟在GROUP BY子句之后,基本语法结构如下:

SELECT 列名1, 聚合函数(列名2)
FROM 表名
GROUP BY 列名1
HAVING 筛选条件;

这里的筛选条件通常是聚合函数的结果,或者分组列的相关判断,不能直接使用未在GROUP BY中出现的非聚合列作为条件,这一点和WHERE子句不同。

HAVING和WHERE的核心区别

很多用户会混淆HAVING和WHERE的用法,两者的核心差异如下:

  • WHERE子句在分组之前执行,用来筛选原始数据行,不能使用聚合函数作为条件
  • HAVING子句在分组之后执行,用来筛选分组后的结果,可以使用聚合函数作为条件
  • 如果查询中没有GROUP BY子句,HAVING的行为和WHERE类似,但依然不建议混用

常见使用实例

实例1:筛选订单数量超过3的用户

假设有一张订单表orders,包含user_idorder_id字段,我们需要查询下单数量超过3的用户ID和下单总数:

SELECT user_id, COUNT(order_id) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(order_id) > 3;

实例2:筛选平均薪资高于8000的部门

假设有一张员工表employees,包含dept_idsalary字段,查询平均薪资高于8000的部门ID和平均薪资:

SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > 8000;

实例3:结合WHERE和HAVING使用

如果需要先筛选入职时间在2023年之后的员工,再统计各部门的平均薪资,只保留平均薪资高于7000的部门:

SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
WHERE hire_date >= '2023-01-01'
GROUP BY dept_id
HAVING AVG(salary) > 7000;

这个例子中WHERE先过滤了入职时间符合条件的员工,再进行分组和HAVING筛选,符合两者的执行顺序逻辑。

使用注意事项

  • HAVING子句中使用的列必须是SELECT中出现的分组列或者聚合函数结果,否则会报错
  • 如果需要对分组结果排序,可以在HAVING之后添加ORDER BY子句,排序规则不影响HAVING的筛选逻辑
  • 不同数据库对HAVING的支持略有差异,比如MySQL允许HAVING使用SELECT中定义的别名,而部分数据库不支持,实际使用时需要结合对应数据库的规范调整

SQLHAVING聚合函数GROUP_BY修改时间:2026-06-15 00:12:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。