Distinguish having and where
WHERE | HAVING | |
---|---|---|
执行时机 | 分组前过滤 | 分组后过滤 |
使用对象 | 原始表中的列 | 分组结果或聚合函数计算结果 |
性能 | 通常更高效 | 通常效率较低 |
1 | SELECT department, AVG(salary) |
1 | SELECT product_id, COUNT(*) as order_count |
1 | SELECT customer_id, SUM(amount) as total_spent |
使用建议
- 优先使用WHERE:能在WHERE中完成的条件就不要用HAVING,减少分组处理的数据量
- 必须时才用HAVING:只有当过滤条件依赖于分组结果或聚合函数时才使用HAVING
- 组合使用:经常WHERE和HAVING一起使用,先用WHERE初步筛选,再用HAVING对分组结果过滤
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yuki-I-Rain!