SQLLearn
← レッスン一覧/中級

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;
JOINでテーブルを結合するサブクエリ

SQL エディタ

練習問題

問題 1

employeesテーブルをdepartment_idでグループ化して、各部署の人数を取得してください