GROUP BYとは?SQL初心者向けに基本から使い方までわかりやすく解説
GROUP BY(グループバイ)とは、同じ値を持つデータをグループ化し、件数や合計、平均などを集計するためのSQL機能です。
売上集計や部署ごとの社員数、商品別の販売数など、IT業務ではデータを集計する場面が数多くあります。そのような集計処理で欠かせないのがGROUP BYです。
GROUP BYとは?
GROUP BYは、SQL(Structured Query Language)の集計機能の一つです。
指定した列の値が同じデータを1つのグループとしてまとめ、そのグループごとに集計結果を表示します。
単にデータを一覧表示するのではなく、「部署ごとの人数」「商品ごとの売上」などを簡単に確認できます。
GROUP BYはどんな場面で使われるのか
実際のIT現場では、次のような業務で利用されています。
- 部署ごとの社員数を集計する
- 商品ごとの売上金額を集計する
- 顧客ごとの注文回数を集計する
- 月ごとの売上件数を確認する
- エラーコードごとの発生件数を集計する
レポート作成やシステム運用では、ほぼ必須といえる機能です。
なぜGROUP BYが重要なのか
大量のデータを一覧で確認するだけでは、傾向や問題点を把握することは難しくなります。
GROUP BYを利用すると、部署別・商品別・月別などに分類して集計できるため、データ分析や障害調査が効率的になります。
社内SEや運用保守でも、ログ分析や利用状況の確認で活躍します。
GROUP BYのイメージ
売上テーブル
| 商品名 | 売上金額 |
|---|---|
| ノートPC | 100000 |
| マウス | 3000 |
| ノートPC | 120000 |
| マウス | 2500 |
GROUP BYで商品名ごとに集計すると次のようになります。
| 商品名 | 売上合計 |
|---|---|
| ノートPC | 220000 |
| マウス | 5500 |
同じ商品名のデータが1つにまとめられています。
GROUP BYの基本構文
SELECT 商品名, SUM(売上金額) FROM 売上 GROUP BY 商品名;
このSQLでは、商品名ごとの売上合計を表示します。
GROUP BYでよく使う集計関数
| 関数 | 内容 |
|---|---|
| COUNT() | 件数を数える |
| SUM() | 合計を求める |
| AVG() | 平均を求める |
| MAX() | 最大値を求める |
| MIN() | 最小値を求める |
GROUP BYは、これらの集計関数と組み合わせて使用することが一般的です。
GROUP BYとORDER BYの違い
| 比較項目 | GROUP BY | ORDER BY |
|---|---|---|
| 役割 | データをグループ化する | データを並び替える |
| 集計 | できる | できない |
| 利用目的 | 件数・合計・平均など | 昇順・降順の表示 |
GROUP BYは「まとめる」、ORDER BYは「並べ替える」と覚えると分かりやすくなります。
実際のIT現場での利用例
| 業務 | 集計内容 |
|---|---|
| 社員管理 | 部署ごとの社員数 |
| 販売管理 | 商品ごとの売上 |
| アクセスログ | IPアドレスごとのアクセス数 |
| システム監視 | エラーコードごとの発生件数 |
| ヘルプデスク | 問い合わせ種別ごとの件数 |
業務でよくあるトラブル
GROUP BYにない列をSELECTしてエラーになる
GROUP BYで指定していない列をSELECTすると、多くのデータベースでエラーになります。
件数が想定と違う
グループ化する列を間違えている可能性があります。
NULLが1つのグループになる
GROUP BYではNULLも1つのグループとして集計されます。
原因の切り分け
| 確認項目 | 確認内容 |
|---|---|
| GROUP BY列 | 正しい列を指定しているか |
| 集計関数 | SUMやCOUNTなどを使用しているか |
| SELECT句 | GROUP BYにない列を指定していないか |
| NULL | NULLデータが含まれていないか |
| WHERE句 | 必要なデータを除外していないか |
確認する順番
- 元データを確認する
- GROUP BYの対象列を確認する
- 集計関数を確認する
- 取得件数を確認する
- 必要に応じてORDER BYで並び替える
GUIでの確認方法
- SQL Server Management Studio(SSMS)
- MySQL Workbench
- DBeaver
- pgAdmin
- Oracle SQL Developer
まずはSELECT文で元データを確認し、その後GROUP BYを追加すると結果を理解しやすくなります。
CUI(コマンド)での確認方法
- mysql
- sqlcmd
- psql
- SQL*Plus
コマンドラインからSQLを実行し、集計結果を確認できます。
ログの確認方法
GROUP BY自体はWindowsイベントログには記録されません。
SQLエラーが発生した場合は、データベースサーバーのエラーログや実行ログを確認します。
イベントビューアーの確認方法
通常は不要です。
データベースサービスが停止している場合や接続エラーが発生した場合のみ、Windowsイベントビューアーを確認します。
PowerShellで確認できること
- データベースサービスの状態確認
- サーバーへの接続確認
- TCPポートの疎通確認
- サービスの起動状態確認
ショートカットキー
| キー | 用途 |
|---|---|
| F5 | SQL実行(SSMS) |
| Ctrl + A | 全文選択 |
| Ctrl + C | 実行停止 |
| Ctrl + F | 検索 |
初心者がやりがちなミス
- GROUP BYに含まれない列をSELECTする
- COUNT()とSUM()を混同する
- GROUP BYとORDER BYの役割を間違える
- NULLも集計対象になることを知らない
- 元データを確認せずに集計する
筆者の経験談
運用保守で障害件数を調査した際、エラーログをそのまま確認していたため、どのエラーが多いのか把握できませんでした。
GROUP BYでエラーコードごとにCOUNT()を実行したところ、特定のエラーが集中していることがすぐに分かり、原因調査を効率的に進められました。大量データを扱う場合は、一覧表示よりも集計結果を確認する方が分析しやすいと実感しました。
上司へ報告するポイント
- 実行したSQL
- 集計対象の列
- 集計方法(COUNT・SUMなど)
- 取得件数
- 分析結果
- 業務への影響範囲
エスカレーションするタイミング
- 集計結果に大きな異常がある場合
- データ不整合が疑われる場合
- SQLエラーの原因が特定できない場合
- 本番データへの影響がある場合
新人が覚えておくべきポイント
- GROUP BYは同じ値をまとめて集計する。
- COUNTやSUMなどの集計関数と組み合わせる。
- GROUP BYに指定していない列は基本的にSELECTできない。
- ORDER BYとは役割が異なる。
- まず元データを確認してから集計する。
関連するIT用語
- SQL(Structured Query Language)
- SELECT
- WHERE
- ORDER BY
- HAVING
- COUNT()
- SUM()
- AVG()
よくある質問(FAQ)
GROUP BYとORDER BYは何が違いますか?
GROUP BYはデータをグループ化して集計する機能です。ORDER BYは表示順を並び替える機能であり、集計は行いません。
GROUP BYを使うときは必ず集計関数が必要ですか?
必須ではありませんが、実務ではCOUNT()やSUM()などの集計関数と組み合わせて使用することがほとんどです。
GROUP BYの後にWHEREは書けますか?
いいえ。WHERE句はGROUP BYより前に記述します。グループ化した後の結果を条件で絞り込む場合はHAVING句を使用します。
まとめ
GROUP BYは、同じ値を持つデータをグループ化し、件数や合計、平均などを集計するSQLの機能です。
売上分析やログ解析、社員数の集計など、IT業務では利用する機会が非常に多く、SQLを扱ううえで欠かせない知識です。
まずは「GROUP BYはデータをまとめる」「COUNTやSUMなどの集計関数と組み合わせる」という2つのポイントを理解し、実際に集計SQLを書きながら使い方に慣れていきましょう。
