在 SQL 中,HAVING 子句用于对“分组后的结果”进行筛选,通常和 GROUP BY 一起使用。它和 WHERE 的区别是:
SELECT 列, 聚合函数(列)
FROM 表
GROUP BY 列
HAVING 聚合函数(列) 条件;
SELECT dept_id, COUNT(*) AS emp_count
FROM employee
GROUP BY dept_id
HAVING COUNT(*) > 3;
✅ 聚合函数
HAVING SUM(salary) > 10000
✅ GROUP BY 中的列
HAVING dept_id = 10
✅ 别名(部分数据库支持,如 MySQL / PostgreSQL)
SELECT dept_id, COUNT(*) AS cnt
FROM employee
GROUP BY dept_id
HAVING cnt > 3;
⚠️ Oracle 等数据库不支持 HAVING 用别名
SELECT dept_id, AVG(salary) AS avg_sal
FROM employee
WHERE status = 'active'
GROUP BY dept_id
HAVING AVG(salary) > 8000;
执行顺序:
❌ 在 HAVING 中使用未聚合、也未 GROUP BY 的列
SELECT dept_id, salary
FROM employee
GROUP BY dept_id
HAVING salary > 5000; -- 错误
❌ 用 HAVING 代替 WHERE(性能差)
-- 不推荐
SELECT *
FROM employee
GROUP BY id
HAVING age > 30;
WHERE 管行,HAVING 管组;
聚合函数进 HAVING,普通条件进 WHERE。
如果你有具体 SQL 或数据库类型(MySQL / Oracle / SQL Server),我可以帮你写一条正确的 HAVING 语句。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。