温馨提示×

温馨提示×

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

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

SQL中HAVING子句怎么用

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

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

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

一、基本语法

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

二、和 WHERE 的区别(重点)

子句 作用对象 能否用聚合函数
WHERE 原始行 ❌ 不能
HAVING 分组结果 ✅ 可以

三、常见使用示例

示例表:orders

order_id customer_id amount
1 A 100
2 A 200
3 B 50
4 B 80
5 C 300

示例 1:筛选消费总额大于 200 的客户

SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 200;

结果:

customer_id total
A 300
C 300

示例 2:HAVING + WHERE 一起用

先排除金额小于 100 的订单,再筛选客户总额 > 200:

SELECT customer_id, SUM(amount) AS total
FROM orders
WHERE amount >= 100
GROUP BY customer_id
HAVING SUM(amount) > 200;

示例 3:使用 COUNT

筛选订单数大于 1 的客户:

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 1;

四、常见错误

❌ 在 WHERE 中使用聚合函数:

-- 错误
SELECT customer_id
FROM orders
WHERE SUM(amount) > 200;

✅ 正确写法是用 HAVING。


五、记忆口诀

先分组,后筛选,用 HAVING;
原始行过滤,用 WHERE。

如果你有具体的 SQL 场景或数据库(MySQL / PostgreSQL / Oracle),我可以帮你写具体例子。

向AI问一下细节

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

AI
助
手