| 特性 | WHERE | HAVING |
|---|---|---|
| 作用階段 | 分組前(行級過濾) | 分組後(組級過濾) |
| 可用聚合函數 | 不可 | 可(如 AVG()、COUNT()) |
| 典型場景 | 原始數據篩選 | 統計結果篩選 |
SELECT column1, AGG_FUNC(column2)
FROM table_name
GROUP BY column1
HAVING aggregate_condition;
-- 1. 查詢各部門平均薪資
SELECT dept, AVG(salary) AS avg_sal
FROM employee
GROUP BY dept;
-- 2. 僅保留平均薪資 > 20000 的部門
SELECT dept, AVG(salary) AS avg_sal
FROM employee
GROUP BY dept
HAVING AVG(salary) > 20000;
第 2 步若改用 WHERE AVG(salary) > 20000 會報錯,因為聚合函數不可用於 WHERE。
HAVING COUNT(*) > 5 AND AVG(salary) > 50000QUALIFY(部分資料庫支援)替代 HAVING