HAVING 和 WHERE 的区别
HAVING 和 WHERE 都是 SQL 中用于筛选数据的子句,但它们有以下关键区别:
主要区别
-
应用阶段不同:
- WHERE 在分组前过滤行(在 GROUP BY 之前)
- HAVING 在分组后过滤组(在 GROUP BY 之后)
-
适用对象不同:
- WHERE 作用于单个行
- HAVING 作用于由 GROUP BY 创建的组
-
可使用的函数不同:
- WHERE 不能使用聚合函数(如 SUM, COUNT, AVG 等)
- HAVING 可以使用聚合函数
使用示例
-- WHERE 示例:筛选单价大于10的产品
SELECT product_name, price
FROM products
WHERE price > 10;
-- HAVING 示例:筛选总销售额超过1000的客户
SELECT customer_id, SUM(amount)
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;
-- 结合使用:先筛选状态为"已完成"的订单,再筛选总金额大于1000的客户
SELECT customer_id, SUM(amount)
FROM orders
WHERE status = 'completed'
GROUP BY customer_id
HAVING SUM(amount) > 1000;
性能考虑
WHERE 通常比 HAVING 更高效,因为它可以在早期阶段减少需要处理的数据量。最佳实践是尽可能使用 WHERE 进行初步筛选,然后使用 HAVING 对分组结果进行过滤。
3316

被折叠的 条评论
为什么被折叠?



