【SQL】GROUP BY と集計関数の使い方を整理する
はじめに
SQLでデータを集計するときによく使われるのが GROUP BY
です。
初めて触れたとき、こんな疑問を抱いたことはありませんか?
「
GROUP BY
は何のために使うのか、よくわからない」
「COUNT()
やSUM()
などの関数と一緒でないと使えないのか?」
「グループ化という考え方が少し難しく感じる」
私自身、最初は GROUP BY
をどのような場面で使えばよいのか分からず混乱しました。
しかし、「グループごとにまとめて、合計や平均を出す」という考え方を理解できれば、それほど難しくありません。
本記事では、初心者の方に向けて
GROUP BY
と集計関数(COUNT
/ SUM
/ AVG
など)の使い方を基本から整理します。
GROUP BY
とは?
1. GROUP BY
は、指定したカラムごとにデータをまとめて集計するための構文です。
例えば「ユーザーごとの購入回数」や「カテゴリーごとの売上合計」などが典型的な例です。
SELECT カラム名, 集計関数
FROM テーブル名
GROUP BY カラム名;
2. よく使う集計関数
関数名 | 説明 |
---|---|
COUNT() |
件数をカウントする |
SUM() |
数値を合計する |
AVG() |
平均を出す |
MAX() |
最大値を取得する |
MIN() |
最小値を取得する |
3. 使用例:売上データでグループ化してみる
orders
テーブル:id | user_id | amount |
---|---|---|
1 | 1 | 5000 |
2 | 1 | 3000 |
3 | 2 | 7000 |
4 | 3 | 4000 |
ユーザーごとの注文合計
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id;
✅ 結果
user_id | total_amount |
---|---|
1 | 8000 |
2 | 7000 |
3 | 4000 |
user_id
ごとにグループ化され、その中の amount
が合計されています。
4. 注意点:SELECT句に出すカラムはどう決まる?
GROUP BY
を使うときは、「どのカラムでグループを作るか」 を明示する必要があります。
そして、グループ内で複数の値があるカラムは、SUM()
や COUNT()
などの集計関数で1つの値にまとめる必要があります。
言い換えると、GROUP BY
に含めていないカラムは、そのまま SELECT
に書くとエラーになります。
❌ エラーになる例
SELECT user_id, amount
FROM orders
GROUP BY user_id;
この場合、user_id
ごとにグループ化しているのに、
amount
は 複数行ある中のどれを表示すればよいかが決まっていないため、SQLはエラーを返します。
✅ 正しい書き方
SELECT user_id, SUM(amount)
FROM orders
GROUP BY user_id;
このように、グループごとの amount
の合計としてまとめて指定することで、
SQLが正しく処理できるようになります。
GROUP BY
の応用:複数カラムでもOK
5. 以下のように「ユーザーごと × 日付ごと」に注文数をカウントする、というような複数条件のグループ化も可能です。
SELECT user_id, DATE(created_at), COUNT(*) AS order_count
FROM orders
GROUP BY user_id, DATE(created_at);
orders
テーブル
例:id | user_id | amount | created_at |
---|---|---|---|
1 | 1 | 5000 | 2025-05-10 12:34:56 |
2 | 1 | 3000 | 2025-05-10 14:12:08 |
3 | 1 | 2500 | 2025-05-11 09:00:00 |
4 | 2 | 4000 | 2025-05-10 10:15:20 |
5 | 2 | 2000 | 2025-05-11 11:45:00 |
クエリ結果
SELECT user_id, DATE(created_at), COUNT(*) AS order_count
FROM orders
GROUP BY user_id, DATE(created_at);
user_id | DATE(created_at) | order_count |
---|---|---|
1 | 2025-05-10 | 2 |
1 | 2025-05-11 | 1 |
2 | 2025-05-10 | 1 |
2 | 2025-05-11 | 1 |
このように、複数カラムで GROUP BY
を使うと、「ユーザーごとの1日単位の注文件数」などを簡単に集計できます。
用途が広く、レポートやダッシュボードでもよく使われます。
おわりに
GROUP BY
は、「まとめて、集計する」ときに使う基本構文です。
最初は難しく見えても
「どのカラムでまとめるか」「どの数値をどう集計するか」という2つの視点を意識すれば、理解が深まりやすくなります。
実務でもよく使われるため、
GROUP BY
と COUNT
/ SUM
などの組み合わせには、慣れておくと安心です。
また、GROUP BY
を使った集計後に 条件を絞りたい場面では、
WHERE
ではなく HAVING
を使う必要があります。
その違いについては、
【初心者向け】SQLのHAVING と WHERE の違いを整理する(GROUP BYとの関係も解説)
にまとめています。
さらに、GROUP BY
と テーブルの結合(JOIN) を組み合わせるケースも多いため、
INNER JOIN
や LEFT JOIN
の使い分けも押さえておくとより実務に役立ちます。
詳しくは、【SQL】INNER JOIN / LEFT JOIN の違いを解説 にまとめています。
Discussion