温馨提示×

温馨提示×

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

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

如何用HAVING子句过滤数据

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

在 SQL 中,HAVING 子句通常用于对分组后的结果进行过滤,它和 WHERE 的区别是:

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

一、基本语法

SELECT 列, 聚合函数(列)
FROM 表
WHERE 条件
GROUP BY 列
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 一起使用

查询 金额大于 50 的订单中,总消费大于 200 的客户:

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

三、常见使用场景

✅ 过滤分组结果

HAVING COUNT(*) > 1

✅ 过滤平均值

HAVING AVG(score) >= 60

✅ 过滤最大值 / 最小值

HAVING MAX(price) < 1000

四、HAVING vs WHERE 对比

对比项 WHERE HAVING
作用对象 行 分组
是否可用聚合函数 ❌ ✅
执行顺序 先执行 后执行

五、注意事项

  • HAVING 必须配合 GROUP BY 使用(除非对整个表聚合)
  • HAVING 中可以使用别名(部分数据库支持):
    SELECT customer_id, SUM(amount) AS total
    FROM orders
    GROUP BY customer_id
    HAVING total > 200;
    

如果你有具体数据库(MySQL / PostgreSQL / SQL Server)或实际业务场景,我可以帮你写更贴合的 SQL。

向AI问一下细节

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

AI
助
手