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句を理解しておくことは、データ分析の世界で活躍する第一歩といえるでしょう。
基本情報技術者試験の理解を確実に定着させたい人や、 科目A・Bをまとめて過去問演習したい人に向けた定番の問題集です。
基本情報技術者 パーフェクトラーニング 過去問題集を見る※ Amazonアソシエイト広告リンク
まとめ
GROUP BY句は、SQLにおけるデータ集計の基本であり、データベースを扱う上で必ず身につけておきたい重要な構文です。単純にデータを取得するだけでなく、同じ値を持つデータをまとめて分析できる点が大きな特徴です。例えば部署ごとの人数、売上の月別集計、カテゴリごとの平均値など、実務で必要とされる多くの処理はGROUP BY句によって実現されます。
また、GROUP BY句は集合関数と組み合わせることで真価を発揮します。COUNTで件数を数えたり、SUMで合計を求めたり、AVGで平均値を出すなど、データの意味を理解するための集計処理を簡単に行うことができます。これにより、生のデータから価値ある情報を引き出すことが可能になります。
さらに、複数列によるグループ化を行うことで、より細かい単位での分析が可能になります。例えば部署と職種の組み合わせでデータを整理することで、組織の構造や傾向をより深く理解することができます。このような分析は、ビジネスの意思決定にも直結する重要な要素となります。
HAVING句との組み合わせも非常に重要です。WHERE句はデータを絞り込んでからグループ化を行うのに対し、HAVING句はグループ化された後の結果に対して条件を指定します。この違いを正しく理解することで、より柔軟で正確なデータ抽出が可能になります。
ORDER BY句を併用することで、集計結果を見やすく並べ替えることもできます。例えば売上の高い順や平均値の低い順に並べることで、データの傾向が一目で分かるようになります。分析結果を他者に伝える際にも非常に有効な手法です。
実務では、GROUP BY句は日常的に使われる重要な技術です。ECサイトでは商品カテゴリごとの売上分析、企業の人事システムでは部署ごとの平均給与や人数集計など、さまざまな場面で活用されています。データ分析の基礎として、しっかりと理解しておくことが求められます。
次のような基本的な書き方をしっかり覚えておくと応用が効きます。
SELECT 列名, 集合関数(列名)
FROM 表名
GROUP BY 列名;
さらに実務に近い例として、部署ごとの平均給与を求める場合は次のように書きます。
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
条件を追加したい場合はHAVING句を使います。
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) >= 300000;
このようにGROUP BY句は、データベース操作の中でも非常に実用性が高く、SQLの理解を深める上で欠かせない存在です。初心者のうちにしっかりと基礎を押さえておくことで、より高度なデータ分析やシステム開発へとスムーズに進むことができるでしょう。
生徒
GROUP BY句はデータをまとめるための機能で、部署ごとやカテゴリごとに集計できるのが特徴なんですね。
先生
その通りです。単なる一覧表示ではなく、意味のある単位でデータを整理できるのが大きなポイントです。
生徒
COUNTやSUMなどの集合関数と一緒に使うことで、件数や合計、平均などを求められるのも理解できました。
先生
よく理解できていますね。さらにHAVING句を使えば、集計後の結果に条件を付けることも可能です。
生徒
WHERE句との違いも大事ですね。WHEREはグループ化の前、HAVINGは後に使うんでしたね。
先生
その理解で問題ありません。さらにORDER BYを使えば、結果を見やすく並べ替えることもできます。
生徒
実務でもよく使われる理由がよく分かりました。データ分析には欠かせない機能ですね。
先生
その通りです。GROUP BY句をしっかり使いこなせるようになれば、SQLの理解が一気に深まりますよ。