SQL中的HAVING用法

HAVING 是 SQL 中专门对 "分组之后的聚合结果" 再做筛选的子句。

它一般跟在 GROUP BY 后面,不能单独使用 ,作用类似于分组版的 WHERE


✅ 1. 语法位置

sql 复制代码
SELECT 列1, 聚合函数(列2) AS 别名
FROM   表
GROUP  BY 列1
HAVING 聚合条件;   -- 这里写对聚合结果的过滤条件

✅ 2. 与 WHERE 的区别(面试高频)

子句 过滤时机 能用的表达式 作用对象
WHERE 分组前 普通列、表达式 原始行
HAVING 分组后 聚合函数、分组列 聚合结果

✅ 3. 工作流程

  1. FROM 取表
  2. WHERE 先过滤原始行
  3. GROUP BY 分组
  4. 对每组算聚合值
  5. HAVING 再按聚合值筛组
  6. SELECT 输出最终列
  7. ORDER BY 排序(如有)

✅ 4. 示例表:orders

order_id customer amount
1 Alice 100
2 Bob 200
3 Alice 150
4 Bob 50
5 Carol 300

🔍 需求:找出 总消费 ≥ 250 的客户

sql 复制代码
SELECT customer,
       SUM(amount) AS total
FROM   orders
GROUP  BY customer
HAVING SUM(amount) >= 250;

结果:

复制代码
customer | total
---------|-------
Alice    | 250
Carol    | 300
  • 先按 customer 分组,算每人总额
  • 再用 HAVING 筛掉 Bob(总额 250 以下)

✅ 5. 常见场景

  • 统计部门平均工资高于 1 万的部门
  • 找出销量超过 100 件的商品
  • 查询下单次数 ≥ 3 次的用户

✅ 6. 易错点

  • 非聚合列 放进 HAVING 会报错(除非该列同时出现在 GROUP BY 里)
  • 忘记先 GROUP BY → 语法错误
  • WHERE 写聚合条件 → 也报错

✅ 7. 一句话总结

HAVING 就是 "分组后再筛组" 的专用工具,和 GROUP BY 形影不离,专门处理聚合结果。

相关推荐
Chengbei1116 小时前
AISec真正拟人化全自动渗透工具!支持浏览器交互全自动化挖掘,SQL注入、XSS、越权等。
sql·安全·web安全·网络安全·自动化·系统安全·xss
闪电悠米16 小时前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
天疆说16 小时前
在 Ubuntu 24.04 上安装 MATLAB R2021b
数据库·ubuntu·matlab
码云数智-大飞16 小时前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git
Volunteer Technology17 小时前
Flink Table API与SQL(二)
大数据·数据库·flink
杨云龙UP17 小时前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析
正在走向自律17 小时前
KingbaseES MySQL模式深度解析,从语法兼容到迁移的全栈指南
数据库·数据库架构·kingbasees·电科金仓
叫我:松哥17 小时前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
阿维的博客日记17 小时前
Hippo4j 线程池监控接入方法
数据库·hippo4j
审判长烧鸡17 小时前
数据库字段命名规范速查表
数据库·sql