HAVING
HAVINGはGROUP BYで作られたグループに条件を適用します。WHEREが行を絞るなら、HAVINGはグループを絞ります。 グループに条件を付ける
基本文法
SELECT group_column, COUNT(*)
FROM table_name
GROUP BY group_column
HAVING COUNT(*) >= 2;例題
社員が2名以上の部署
部署ごとに人数を集計し、HAVINGで2名以上の部署だけを残します。
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) >= 2;平均給与が5,000,000以上の部署
AVG()の結果に条件を付けます。
SELECT department_id,
COUNT(*) AS employee_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 5000000
ORDER BY avg_salary DESC;WHEREとHAVINGを組み合わせる
先にWHEREで行を絞り、GROUP BYで集計し、HAVINGでグループを絞ります。
SELECT department_id, COUNT(*) AS employee_count, SUM(salary) AS total_salary
FROM employees
WHERE hire_date >= '2020-01-01'
GROUP BY department_id
HAVING COUNT(*) >= 2
ORDER BY total_salary DESC;知っておくと便利なこと
- WHEREは個別の行、HAVINGは集計したグループを絞り込みます。
- WHEREに集計関数を直接書くことはできません。
- 主な処理順序はFROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BYです。
練習問題
- 社員が2名以上の部署 · 中級 · HAVING, 集計関数