HAVING与WHERE的区别详解

HAVING 和 WHERE 的区别

HAVING 和 WHERE 都是 SQL 中用于筛选数据的子句,但它们有以下关键区别:

主要区别

  1. 应用阶段不同

    • WHERE 在分组前过滤行(在 GROUP BY 之前)
    • HAVING 在分组后过滤组(在 GROUP BY 之后)
  2. 适用对象不同

    • WHERE 作用于单个行
    • HAVING 作用于由 GROUP BY 创建的组
  3. 可使用的函数不同

    • 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 对分组结果进行过滤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值