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

相关推荐
倔强的石头_16 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再5 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest5 天前
数据库SQL学习
数据库·sql