HAVING
和 WHERE
都是用来筛选数据的,但它们的应用场景有所不同。
WHERE:用于筛选行数据,通常在
FROM
子句之后执行。它在分组操作 (GROUP BY
) 之前应用,用来筛选出符合条件的记录。示例:
SELECT name, age FROM employees WHERE age > 30;
HAVING:用于筛选分组后的结果,通常在
GROUP BY
子句之后执行。它是在GROUP BY
聚合计算后,对每一个分组结果进行筛选。示例:
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 5;
主要区别:
WHERE
作用在 行 级别,适用于筛选单行记录的数据。HAVING
作用在 组 级别,适用于筛选聚合后的结果。
总结来说,WHERE
用来在 GROUP BY
之前筛选数据,而 HAVING
用来在分组之后筛选聚合结果。