在 SQL 中,HAVING 子句用于对 分组后的结果 进行筛选,通常和 GROUP BY 一起使用。
可以简单理解为:
WHERE 筛选“行”,
HAVING 筛选“分组”。
SELECT 列, 聚合函数()
FROM 表
WHERE 条件
GROUP BY 列
HAVING 分组筛选条件;
执行顺序:
FROMWHERE(先过滤原始数据)GROUP BYHAVING(再过滤分组结果)示例:查询订单数大于 3 的用户
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 3;
✅ HAVING 中可以使用聚合函数
❌ WHERE 不能直接用聚合函数
SELECT user_id, COUNT(*) AS cnt
FROM orders
GROUP BY user_id
HAVING cnt > 3;
⚠️ MySQL 支持,但 标准 SQL 不保证所有数据库都支持
SELECT dept_id, AVG(salary) AS avg_salary
FROM employee
GROUP BY dept_id
HAVING AVG(salary) > 5000 AND COUNT(*) >= 5;
SELECT dept_id, COUNT(*)
FROM employee
WHERE salary > 3000
GROUP BY dept_id
HAVING COUNT(*) > 10;
含义:
WHERE:先去掉工资 ≤ 3000 的员工HAVING:再只保留人数 > 10 的部门当整张表被当作一个分组时:
SELECT COUNT(*) AS total
FROM orders
HAVING COUNT(*) > 100;
等价于:
SELECT COUNT(*)
FROM orders
WHERE (SELECT COUNT(*) FROM orders) > 100;
❌ 在 WHERE 中用聚合函数:
WHERE COUNT(*) > 3 -- 错误
✅ 正确写法:
HAVING COUNT(*) > 3
HAVING 是对 GROUP BY 后的“分组结果”进行筛选,常用于聚合函数条件过滤。
如果你有具体 SQL 场景或数据库(MySQL / Oracle / SQL Server),我可以给你更针对性的例子。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。