温馨提示×

温馨提示×

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

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

SQL中HAVING如何筛选

发布时间:2026-10-07 02:10:19 来源:亿速云 阅读:87 作者:小樊 栏目:数据库

在 SQL 中,HAVING 子句用于对 分组后的结果 进行筛选,通常和 GROUP BY 一起使用。
可以简单理解为:

WHERE 筛选“行”,
HAVING 筛选“分组”。


一、基本语法

SELECT 列, 聚合函数()
FROM 表
WHERE 条件
GROUP BY 列
HAVING 分组筛选条件;

执行顺序:

  1. FROM
  2. WHERE(先过滤原始数据)
  3. GROUP BY
  4. 聚合计算
  5. HAVING(再过滤分组结果)

二、HAVING 常见用法

1️⃣ 筛选聚合结果(最常用)

示例:查询订单数大于 3 的用户

SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 3;

✅ HAVING 中可以使用聚合函数
❌ WHERE 不能直接用聚合函数


2️⃣ HAVING 中使用别名(部分数据库支持)

SELECT user_id, COUNT(*) AS cnt
FROM orders
GROUP BY user_id
HAVING cnt > 3;

⚠️ MySQL 支持,但 标准 SQL 不保证所有数据库都支持


3️⃣ HAVING + 多个条件

SELECT dept_id, AVG(salary) AS avg_salary
FROM employee
GROUP BY dept_id
HAVING AVG(salary) > 5000 AND COUNT(*) >= 5;

4️⃣ HAVING 与 WHERE 的区别示例

SELECT dept_id, COUNT(*)
FROM employee
WHERE salary > 3000
GROUP BY dept_id
HAVING COUNT(*) > 10;

含义:

  • WHERE:先去掉工资 ≤ 3000 的员工
  • HAVING:再只保留人数 > 10 的部门

三、HAVING 不用 GROUP BY 的情况(特殊)

当整张表被当作一个分组时:

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),我可以给你更针对性的例子。

向AI问一下细节

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

AI
助
手