SQLのGROUP BY句 完全ガイド:使い方と実践例を徹底解説
SQLのGROUP BY句は、集計関数と組み合わせて使用される重要な構文です。クエリで取得したデータを特定の列を基準にグループ化するために使われ、複数の列を指定してグループ化することも可能です。
SQLで集計関数を使う際、共通する列の値を基準に行をまとめたいケースはよくあります。
例えば、自社の支店名の一覧と、それぞれの支店で働く従業員数を同時に知りたいとしましょう。この場合、集計関数を使用し、支店名でグループ化する必要があります。
そこで活躍するのがSQLのGROUP BY句です。この記事では、GROUP BY句の基本的な使い方から実践的な応用例まで詳しく解説します。
集計関数のおさらい
データベースを扱うとき、実際のデータそのものではなく、データに関する情報が必要になることがよくあります。例えば、自社が扱っているユニークな商品数や、リーダーボードの最高スコアなどを知りたい場合です。
こうした情報を取得するために、SQLにはいくつかの組み込み関数が用意されています。これらは「集計関数」と呼ばれます。
例えば、営業担当者の従業員数を調べたい場合は、COUNT関数を使います。COUNT関数は、特定の条件に一致する行の数を数えて返します。その他の主な集計関数には、SUM(合計)、AVG(平均)、MIN(最小値)、MAX(最大値)などがあります。
SQLのGROUP BY句とは
SQLのGROUP BY句は、行を指定した列の値ごとにグループ化します。GROUP BY句は、MINやMAXなどの集計関数を使うクエリで頻繁に使用されます。GROUP BY句は、クエリ内の集計関数以外の列の情報を、どのように集約して表示するかをSQLに指示する役割を果たします。
GROUP BY句の基本構文は以下の通りです。
SELECT COUNT(column1_name), column2_name FROM table1_name GROUP BY column2_name;
このクエリでは集計関数を使用しつつ、別の列も指定しています。
このようなクエリの場合、GROUP BY句が必須になります。GROUP BY句があることで、集計関数の外にある列のデータをどう表示すべきかをSQLに伝えられます。ポイントは、集計関数に含まれていない列でグループ化することです。
なお、GROUP BY句はSELECT文でのみ使用できる点にも注意してください。
それでは、GROUP BY句の具体的な使用例を見ていきましょう。
GROUP BY句の使用例
ここでは、従業員の役職ごとの人数を調べたいとします。つまり、営業担当者が何人いて、マーケティングディレクターが何人いるのかといった情報を取得したいわけです。
この情報を取得するには、次のようなクエリを使用します。
SELECT title, COUNT(title) FROM employees GROUP BY title;
このクエリを実行すると、複数のレコードが返されます。
| title | count |
|---|---|
| Senior Sales Associate | 1 |
| Sales Associate | 4 |
| Vice President of Sales | 1 |
| Marketing Director | 1 |
(4行)
このGROUP BYクエリにより、従業員が持つユニークな役職の一覧が返されました。各役職の横には、その役職を持つ従業員の人数が表示されています。
SQLでGROUP BYを使うべき場面
GROUP BY句が必要になるのは、集計関数から返される結果以上の情報を取得したい場合です。
例えば、顧客の総数だけを知りたいのであれば、通常のクエリを実行するだけで十分です。以下はその一例です。
SELECT COUNT(name) FROM customers;
このクエリの結果は以下の通りです。
| count |
|---|
| 7 |
(1行)
一方、ロイヤルティプランごとの顧客数を知りたい場合は、GROUP BY句を使用する必要があります。以下は、各プランの名称と、そのプランに登録している顧客数の一覧を取得するクエリの例です。
SELECT loyalty_plan, COUNT(loyalty_plan) FROM customers GROUP BY loyalty_plan;
このクエリの結果は以下の通りです。
| loyalty_plan | count |
|---|---|
| Gold | 1 |
| None | 3 |
| Silver | 1 |
| Bronze | 2 |
(4行)
複数の列でGROUP BYする方法
GROUP BY句では、複数の列を組み合わせてグループ化することもできます。例えば、支店ごとに特定の役職を持つ従業員が何人いるかを調べたいとしましょう。次のクエリでこのデータを取得できます。
SELECT branch, title, COUNT(title) FROM employees GROUP BY branch, title;
このクエリの結果セットは以下の通りです。
| branch | title | count |
|---|---|---|
| Stamford | Sales Associate | 1 |
| Albany | Vice President of Sales | 1 |
| San Francisco | Sales Associate | 1 |
| San Francisco | Senior Sales Associate | 1 |
| Albany | Marketing Director | 1 |
| Boston | Sales Associate | 2 |
(6行)
このクエリにより、各従業員の役職の一覧と、その役職を持つ人数が表示されました。データは、各従業員が勤務する支店と役職という2つの軸でグループ化されています。
まとめ
SQLのGROUP BY句は、集計関数を使用し、かつ集計対象以外の列もクエリに含めるすべてのステートメントで必要となります。グループ化の対象は、集計関数に含まれていない列です。
最後に、理解度を試してみましょう。「employees」テーブルから、支店ごとの従業員数を求めるステートメントを自分で書いてみてください。テーブル名は「employees」、支店名が格納されている列は「branch」です。この記事で学んだ内容をもとに、自分のクエリが正しく機能するか確認してみてください。
-
【2024年最新】フォートナイト(Fortnite)のシステム要件を徹底解説|PC・Macの動作環境チェック完全ガイド
フォートナイト(Fortnite)は今や世界中で大人気のバトルロイヤルゲームですが、「自分のPCでも動くのか?」「このPCのスペックで快適にプレイできるのか?」という疑問を持つ方は少なくありません。一般的に、ゲームは通常のアプリケーションと比べて、メモリ(RAM)、CPU(プロセッサー)、グラフィックボード、DirectXなどに対する要求水準が高くなっています。 本記事では、以下の内容について詳しく解説します。 フォートナイトの最低動作環境とは? 推奨PCスペックはどれくらい? Macでのシステム要件は? おまけ:ドライバーとゲームコンポーネントの更新でフォートナイトを高速化する方法
-
Fitbit Pay完全ガイド:設定方法からお支払い・セキュリティ対策まで徹底解説
Fitbitは、最も優れたスマートウェアラブルデバイスのひとつです。多彩なモデルと豊富な機能を備えており、その中でも人気の高い機能が「Fitbit Pay」です。Fitbit IonicやFitbit Versaに搭載されたNFC(近距離無線通信)チップにより、非接触決済に対応したあらゆる店舗で、腕時計をつけたまま支払いが可能になります。 この記事では、Fitbit Payの使い方をマスターできるよう、設定方法からセキュリティ対策まで完全ガイドとして詳しく解説します。 Fitbit Payとは? Fitbit Payは、デビットカードやクレジットカードをFitbit IonicおよびVersa