温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HAVING子句怎么写才正确

发布时间:2026-11-01 13:01:08 来源:亿速云 阅读:107 作者:小樊 栏目:数据库

在 SQL 中,HAVING 子句用于对“分组后的结果”进行筛选,通常和 GROUP BY 一起使用。它和 WHERE 的区别是:

  • WHERE:在分组前过滤“行”
  • HAVING:在分组后过滤“组”

一、基本正确写法

SELECT 列, 聚合函数(列)
FROM 表
GROUP BY 列
HAVING 聚合函数(列) 条件;

示例 1:按部门分组,筛选人数大于 3 的部门

SELECT dept_id, COUNT(*) AS emp_count
FROM employee
GROUP BY dept_id
HAVING COUNT(*) > 3;

二、HAVING 中可以使用的内容

✅ 聚合函数

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 用别名


三、HAVING 和 WHERE 一起用(推荐)

SELECT dept_id, AVG(salary) AS avg_sal
FROM employee
WHERE status = 'active'
GROUP BY dept_id
HAVING AVG(salary) > 8000;

执行顺序:

  1. WHERE 过滤行
  2. GROUP BY 分组
  3. HAVING 过滤组

四、常见错误写法 ❌

❌ 在 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 语句。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手