GROUP BY・HAVINGで集計する
集計関数
| 関数 | 意味 |
|---|---|
| COUNT(*) | 行数を数える |
| SUM(列) | 合計を求める |
| AVG(列) | 平均を求める |
| MAX(列) | 最大値を求める |
| MIN(列) | 最小値を求める |
GROUP BY でグループ化
指定したカラムの値ごとにデータをグループ化して集計します。
SELECT department_id, COUNT(*) AS 人数
FROM employees
GROUP BY department_id;
複数の集計関数
SELECT department_id,
COUNT(*) AS 人数,
AVG(salary) AS 平均給与,
MAX(salary) AS 最高給与
FROM employees
GROUP BY department_id;
HAVING でグループに条件をつける
WHEREはグループ化前、HAVINGはグループ化後の絞り込みです。
SELECT department_id, COUNT(*) AS 人数
FROM employees
GROUP BY department_id
HAVING COUNT(*) >= 3;
JOIN + GROUP BY
SELECT d.name AS 部署名, COUNT(*) AS 人数, AVG(e.salary) AS 平均給与
FROM employees e
JOIN departments d ON e.department_id = d.id
GROUP BY d.name
ORDER BY 平均給与 DESC;
SQL エディタ
練習問題
問題 1
employeesテーブルをdepartment_idでグループ化して、各部署の人数を取得してください