🔖

【SQL】GROUP BY と集計関数の使い方を整理する

に公開

はじめに

SQLでデータを集計するときによく使われるのが GROUP BY です。
初めて触れたとき、こんな疑問を抱いたことはありませんか?

GROUP BY は何のために使うのか、よくわからない」
COUNT()SUM() などの関数と一緒でないと使えないのか?」
「グループ化という考え方が少し難しく感じる」

私自身、最初は GROUP BY をどのような場面で使えばよいのか分からず混乱しました。
しかし、「グループごとにまとめて、合計や平均を出す」という考え方を理解できれば、それほど難しくありません。

本記事では、初心者の方に向けて
GROUP BY と集計関数(COUNT / SUM / AVG など)の使い方を基本から整理します。

1. GROUP BY とは?

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が正しく処理できるようになります。

5. GROUP BY の応用:複数カラムでもOK

以下のように「ユーザーごと × 日付ごと」に注文数をカウントする、というような複数条件のグループ化も可能です。

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 BYCOUNT / SUM などの組み合わせには、慣れておくと安心です。

また、GROUP BY を使った集計後に 条件を絞りたい場面では、
WHERE ではなく HAVING を使う必要があります。
その違いについては、
【初心者向け】SQLのHAVING と WHERE の違いを整理する(GROUP BYとの関係も解説)
にまとめています。

さらに、GROUP BYテーブルの結合(JOIN) を組み合わせるケースも多いため、
INNER JOINLEFT JOIN の使い分けも押さえておくとより実務に役立ちます。
詳しくは、【SQL】INNER JOIN / LEFT JOIN の違いを解説 にまとめています。

Discussion