英語607877 views
中学数学621382 views
りんご192546 views
いろは2986023 views
小学理科717236 views
小学社会308636 views
Computer365120 views
中学社会667106 views
高校生物549842 views
高校倫理1433119 views
Help
Tools

English

GROUP BY でグループごとに集計する

GROUP BY を使うと、特定のカラムの値ごとにデータをグループ化して集計できます。「都市ごとのユーザー数」「月ごとの売上」のような集計に使います。

基本構文

SELECT カラム名, 集計関数 FROM テーブル名 GROUP BY カラム名;

具体例

users テーブルで、都市ごとのユーザー数を調べるには、こう書きます。

SELECT city, COUNT(*) AS user_count
FROM users
GROUP BY city;

結果は次のようになります。

cityuser_count
東京45
大阪30
名古屋15

GROUP BY の動き

GROUP BY は次のように動きます。

テーブル全体を取得

指定したカラムの値でグループに分ける

各グループに対して集計関数を適用

複数のカラムでグループ化

複数のカラムを指定すると、その組み合わせでグループ化されます。

SELECT city, gender, COUNT(*) AS user_count
FROM users
GROUP BY city, gender;
citygenderuser_count
東京male25
東京female20
大阪male18
大阪female12

SELECT で使えるカラム

GROUP BY を使うと、SELECT で指定できるカラムに制限があります。

使える

GROUP BY で指定したカラム、集計関数

使えない

GROUP BY で指定していない通常のカラム

-- 正しい
SELECT city, COUNT(*) FROM users GROUP BY city;

-- エラー(name は GROUP BY にも集計関数にもない)
SELECT city, name, COUNT(*) FROM users GROUP BY city;

グループ化すると、各グループから 1 行しか返らないので、どの name を返せばよいか決まらないからです。

集計関数と一緒に使う

GROUP BY は集計関数と組み合わせて使うのが基本です。

-- 都市ごとの平均年齢
SELECT city, AVG(age) AS avg_age FROM users GROUP BY city;

-- 部署ごとの合計給与
SELECT department_id, SUM(salary) AS total_salary 
FROM employees GROUP BY department_id;

ORDER BY で並び替える

集計結果を並び替えることもできます。

SELECT city, COUNT(*) AS user_count
FROM users
GROUP BY city
ORDER BY user_count DESC;

ユーザーが多い都市から順に並びます。

GROUP BY でグループごとの集計ができるようになると、データ分析の幅が大きく広がります。次は HAVING を使って、集計結果をさらに絞り込む方法を見てみましょう。