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 形影不离,专门处理聚合结果。

相关推荐
zuoerjinshu4 小时前
sql实战解析-sum()over(partition by xx order by xx)
数据库·sql
NocoBase5 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
Hoshino.416 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
Oueii7 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
未来龙皇小蓝8 小时前
【MySQL-索引调优】11:Group by相关概念
数据库·mysql·性能优化
2401_831824968 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
njidf8 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
twc8298 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试
@我漫长的孤独流浪8 小时前
Python编程核心知识点速览
开发语言·数据库·python
2401_851272998 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python