在 SQL 中,HAVING 子句通常用于对分组后的结果进行过滤,它和 WHERE 的区别是:
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 |
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 200;
结果:
| customer_id | total |
|---|---|
| A | 300 |
| C | 300 |
查询 金额大于 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
| 对比项 | WHERE | HAVING |
|---|---|---|
| 作用对象 | 行 | 分组 |
| 是否可用聚合函数 | ❌ | ✅ |
| 执行顺序 | 先执行 | 后执行 |
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
HAVING total > 200;
如果你有具体数据库(MySQL / PostgreSQL / SQL Server)或实际业务场景,我可以帮你写更贴合的 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。