Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

GROUP BY句(グループバイく)とは | 意味や読み方など丁寧でわかりやすい用語解説

GROUP BY句(グループバイく)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

グループ化句 (グループカク)

英語表記

GROUP BY clause (グループバイ クラウズ)

用語解説

GROUP BY句は、データベース言語であるSQL(Structured Query Language)において、テーブル内のデータを特定の条件でグループ化するために使用される命令である。主にSELECT文の中で用いられ、テーブルに存在する多数の行を、指定した列の値が同じもの同士で意味のあるグループにまとめ、各グループに対して集計処理を行うことを目的とする。例えば、全社員のデータが格納されたテーブルから部署ごとの平均年齢を算出したり、膨大な販売履歴データから商品カテゴリごとの売上合計を求めたりする際に不可欠な機能である。GROUP BY句は、単にデータを集計するだけでなく、データ分析の第一歩として、全体の傾向や特徴を把握するための強力な手段となる。構文上は、データを取得するテーブルを指定するFROM句や、行を絞り込むWHERE句の後に記述され、結果の並び順を定義するORDER BY句の前に置かれるのが一般的である。

GROUP BY句を詳細に理解するためには、その構文と集計関数との関係性を把握することが重要である。基本的な構文は「GROUP BY 列名」という形式で、この「列名」に指定された列の値が同一である行が、一つのグループとして扱われる。例えば、「GROUP BY department」とすれば、department列の値が「営業部」である行すべてが営業部グループに、「開発部」である行すべてが開発部グループにまとめられる。GROUP BY句の最大の特徴は、このようにして作成されたグループ単位で集計関数を適用できる点にある。集計関数とは、複数の値から一つの集約値を計算する関数のことで、代表的なものに、行数を数えるCOUNT、合計値を求めるSUM、平均値を算出するAVG、最大値を見つけるMAX、最小値を見つけるMINなどがある。GROUP BY句と集計関数を組み合わせることで、「SELECT department, AVG(age) FROM employees GROUP BY department;」のように、部署ごとの平均年齢を算出するクエリが実現できる。このとき、GROUP BY句によって作られた各部署グループに対して、それぞれAVG(age)が計算される。

GROUP BY句を使用する際には、SELECT句に記述できる列に制約があることを理解しておく必要がある。SELECT句には、GROUP BY句でグループ化の基準として指定した列、集計関数の結果、または定数しか記述することができない。これは、グループ化によって複数の行が一つの代表行に集約されるため、グループ内のどの行の値を表示すべきかデータベースが特定できないからである。例えば、部署でグループ化した場合、SELECT句に個々の社員名を表示しようとしても、一つの部署には複数の社員が存在するため、どの社員名を表示すればよいか定まらない。このルールに反したクエリは多くのデータベースシステムでエラーとなる。

また、グループ化の基準として複数の列を指定することも可能である。その場合は「GROUP BY 列名1, 列名2」のようにカンマで区切って列名を並べる。これにより、列名1と列名2の値の組み合わせが同じ行同士で一つのグループが形成される。例えば、「GROUP BY prefecture, gender」と指定すれば、「東京都・男性」「東京都・女性」「大阪府・男性」といった、都道府県と性別の組み合わせごとのグループを作成し、それぞれのグループに対して集計を行うことができる。

GROUP BY句と密接に関連する句として、WHERE句とHAVING句が存在し、これらの違いを正確に理解することが重要である。WHERE句は、グループ化が行われる前に、テーブルの個々の行に対して適用される絞り込み条件である。つまり、まずWHERE句で条件に合致する行だけを抽出し、その絞り込まれた結果セットに対してGROUP BY句が適用される。一方で、HAVING句は、GROUP BY句によってグループ化された後の結果に対して適用される絞り込み条件である。したがって、HAVING句の条件式の中では集計関数を使用することができる。「売上合計が100万円以上の商品カテゴリのみを表示する」といった、集計結果に基づいた絞り込みはHAVING句でしか実現できない。処理の順序は、FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BYの順で実行されると考えると理解しやすい。この順序を把握することは、複雑なデータ集計や分析を行う上で極めて重要となる。

関連コンテンツ