GROUP BY句とは?初心者でもわかるデータのグループ化と集計の基本を解説!
生徒
「先生、SQLのGROUP BY句(グループバイク)って何に使うんですか?」
先生
「GROUP BY句は、データベース(Database/データベース)の中のデータを“グループ”にまとめて集計するときに使います。例えば、部署ごとの社員数や月ごとの売上合計を出したいときに便利なんです。」
生徒
「なるほど!単にデータを一覧で見るだけじゃなくて、まとめるときに使うんですね?」
先生
「そうです。GROUP BY句は、集合関数(シュウゴウカンスウ)と一緒に使うことが多くて、データの分析や統計に欠かせない構文なんですよ。では順番に見ていきましょう。」
1. GROUP BY句(グループバイク)とは?
GROUP BY句は、SQL(エスキューエル/Structured Query Language)でデータをグループ化するための構文です。たとえば、社員テーブルのデータを部署ごとにまとめたい、または売上データを月ごとに集計したい、そんなときに使います。
通常のSELECT文(セレクトブン)は1行ずつデータを取得しますが、GROUP BY句を使うと「同じ値を持つ行をひとまとめ」にできます。そして、そのグループごとに合計や平均などの計算ができるようになります。
2. GROUP BY句の基本構文
GROUP BY句は、SELECT文の中で次のように使います。
SELECT 列名, 集合関数(列名)
FROM 表名
GROUP BY 列名;
たとえば、部署ごとの社員数を求めたい場合は次のように書きます。
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
このSQLを実行すると、部署(department)ごとに社員の人数が表示されます。GROUP BYは単独では意味を持たず、COUNTやSUM(サム)、AVG(エーブイジー)などの集合関数と組み合わせて使うのが基本です。
3. 集合関数(シュウゴウカンスウ)との関係
GROUP BY句の真価は、集合関数と組み合わせたときに発揮されます。代表的な集合関数には次のようなものがあります。
COUNT():件数を数えるSUM():合計を求めるAVG():平均を求めるMAX():最大値を求めるMIN():最小値を求める
例えば、「部署ごとの平均給与」を出したいときは次のように書きます。
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
これにより、部署ごとに平均給与が計算され、整理された形で結果が表示されます。
4. 複数の列でグループ化する
GROUP BY句では、複数の列を指定してグループ化することも可能です。たとえば、部署ごと・職種ごとに社員数を出したい場合は次のようにします。
SELECT department, job_title, COUNT(*)
FROM employees
GROUP BY department, job_title;
このように書くと、「部署 × 職種」の組み合わせごとに社員の数を表示できます。複数列を使うことで、より細かい単位での分析ができるようになります。
5. HAVING句(ハビングク)との組み合わせ
GROUP BY句で集計した結果に条件を付けたい場合は、HAVING句を使います。HAVING句は、WHERE句と似ていますが、WHERE句はグループ化の前、HAVING句はグループ化の後に条件を指定します。
例えば、「平均給与が30万円以上の部署だけを表示」したいときは次のように書きます。
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) >= 300000;
このようにHAVING句を使うと、集計結果に対してフィルタをかけることができます。
6. WHERE句(ウェアク)との違い
WHERE句とHAVING句は混同しやすいですが、実行されるタイミングが違います。
- WHERE句:グループ化する前に、行を絞り込む
- HAVING句:グループ化した後に、グループを絞り込む
たとえば、営業部の中で平均給与が30万円以上の部署を出したい場合は、WHEREとHAVINGを両方使います。
SELECT department, AVG(salary)
FROM employees
WHERE department = '営業部'
GROUP BY department
HAVING AVG(salary) >= 300000;
WHEREで「営業部」だけに絞り、HAVINGで「平均給与30万円以上」に絞るという流れです。
7. ORDER BY句(オーダーバイク)と一緒に使う
GROUP BY句でグループ化した結果を並べ替えたい場合は、ORDER BY句を組み合わせて使います。たとえば、平均給与が高い順に並べたい場合は次のようにします。
SELECT department, AVG(salary)
FROM employees
GROUP BY department
ORDER BY AVG(salary) DESC;
これにより、部署ごとの平均給与が高い順(降順)に表示されます。GROUP BYとORDER BYはよくセットで使われる構文です。
8. 実務でのGROUP BY句の活用例
GROUP BY句は、業務システムやデータ分析の現場で頻繁に登場します。たとえば、ネットショップでは「商品カテゴリごとの売上合計」や「月ごとの注文数」を求めるときにGROUP BYが使われます。
また、人事システムでは「部署ごとの平均年齢」や「職種ごとの社員数」を算出するのに利用されます。GROUP BY句を使えば、データベースの中の情報を“意味のある単位”で集計できるようになるのです。
9. GROUP BY句の歴史と現在の活用
GROUP BY句は、リレーショナルデータベース(RDB/アールディービー)の登場とともに標準SQLとして取り入れられました。1970年代に考案されたSQLの基礎構文のひとつであり、今もMySQL(マイエスキューエル)・PostgreSQL(ポストグレスキューエル)・Oracle(オラクル)・SQL Server(エスキューエルサーバー)など、あらゆるデータベースで利用されています。
さらに、近年のクラウド環境やビッグデータ分析の分野でもGROUP BY句は欠かせません。たとえば、Google BigQuery(グーグルビッグクエリ)やAmazon Redshift(アマゾンレッドシフト)などでも同様の構文でデータ集計が可能です。つまり、GROUP BY句を理解しておくことは、データ分析の世界で活躍する第一歩といえるでしょう。