「GROUP BY」句とは?
SQLの「GROUP BY」句とは、任意のカラムの値に基づいてレコードをグループ化するのに用いられるクエリです。集計関数(SUMやCOUNTなど)と併用することで「クラスごとの人数を調べる」というように、グループごとの合計値やレコード数を求めることができます。また、「WHERE」句や「HAVING」句を併用して条件付きのグループ化を行ったり、「ORDER BY」句との併用でグループ化したグループの順番を並び変えるといった応用的な使い方もあります。特に、膨大なデータ量を扱う場合によく用いられるのでぜひ覚えておきたいクエリです。
「GROUP BY」句の基本構文
【使用イメージ】
SELECT 表示させるカラム名 FROM テーブル名 GROUP BY グループ化するカラム名;
≫まずは簡単60秒で無料お問い合わせから≪
【サンプルテーブル】
「GROUP BY」句の具体的な使い方を解説していくにあたって、サンプルとして「テスト」テーブルを用意しました。
「テスト」テーブル
id | 氏名 | 性別 | 点数 |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
集計関数「COUNT」でグループごとのレコード数を取得する
集計関数とは
集計関数とは、その項目の合計値や平均値を求めたり、あるいはCOUNT関数のようにデータ件数を取得するなど、その名の通り集計を行う関数のことです。これらを利用することで都度計算する必要がなくなり、データ分析などに使うと便利です。後ほど詳しく紹介しますが、集計関数とそれぞれ用途を以下に示しました。
集計関数 | 用途 |
COUNT | 項目のデータ件数を取得する |
SUM | 項目のデータ合計値を取得する |
AVG | 項目のデータ平均値を取得する |
MAX | 項目のデータ最大値を取得する |
MIN | 項目のデータ最小値を取得する |
データ件数を取得する「COUNT」関数を併用し、以下の実行コードでテストを受けた生徒の男女別の人数を求めます。
【実行コード】
SELECT 性別, COUNT(性別) FROM テスト GROUP BY 性別;
【実行結果】
性別 | COUNT(性別) |
男 | 3 |
女 | 4 |
「性別」でグループ化を行い、性別とその数を抽出しています。
このように、「GROUP BY」句と「COUNT」関数を併用すればグループごとのレコード数を集計できます。
ほかにも、「SUM」関数を併用すればグループごとの合計値、「AVG」関数を併用すればグループごとの平均値が求められるので、ほかの関数を試してみるのもいいですね!
「GROUP BY」句を使う上での注意点
列名の指定を統一する
SELECT 表示させるカラム名 FROM テーブル名 GROUP BY グループ化するカラム名;
上記のように、対象の「カラム名」と「グループ化を行うカラム名」が同じ列(カラム)である必要があります。GROUP BY句で指定カラムを「集約キー」や「グループ化列」といいます。
× SELECT 氏名 FROM テスト GROUP BY 性別;
NULLも1つのグループとして扱われる
指定したカラムに「NULL」値が含まれている場合、「NULL値グループ」といったように、NULLも1つのグループとして集計されます。
条件を付けてグループごとのレコード数を取得する
「WHERE」句と「HAVING」句の違い
条件を付けるクエリに「WHERE」句と「HAVING」句がありますが、「GROUP BY」句と併用する場合、両者には以下の違いがあることを知っておく必要があります。
「WHERE」句:「GROUP BY」句の実行前に条件が適応される
「HAVING」句:「GROUP BY」句の実行後に条件が適応される
グループ化の前に任意の条件を満たさないレコードを省く場合は「WHERE」句を使い、グループ化後に任意の条件を満たさないグループを省く場合に「HAVING」句を使います。
「GROUP BY」句と「WHERE」句を併用してグループ化前に絞る
先ほどの「テスト」テーブルを用いて、生徒のうち、テストの点数が60点未満の生徒を除いた男女別の人数を表示させましょう。
「テスト」テーブル
id | 氏名 | 性別 | 点数 |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
【実行コード】
SELECT 性別, COUNT(性別) AS 人数 FROM テスト WHERE 点数>=60 GROUP BY 性別;
【実行結果】
性別 | 人数 |
男 | 3 |
女 | 3 |
60点未満の土屋さんが除かれたことで、60点以上の生徒は男子が3名、女子が3名となりました。
「GROUP BY」句と「HAVING」句を併用してグループ化後に絞る
続いて、「テスト」テーブルのうち、人数が3人以下のグループのみ表示させましょう。
【実行コード】
SELECT 性別, COUNT(性別) AS 人数 FROM テスト GROUP BY 性別 HAVING 4>人数;
【実行結果】
性別 | 人数 |
男 | 3 |
4人以上のグループが除かれたことで、男子生徒のみが表示されました。
「ORDER BY」句でグループ化したグループを並び替える
「ORDER BY」句とは
「ORDER BY」句とは、任意のカラム(列)に基づいて結果をソート(並び替え)するクエリです。これにより、データの整理や分析を行いやすくなります。
例として、性別ごとにグループ化したグループを降順で並び替えます。
【実行コード】
SELECT 性別, COUNT(性別) AS 人数 FROM テスト GROUP BY 性別 ORDER BY 人数 DESK;
【実行結果】
性別 | COUNT(性別) |
女 | 4 |
男 | 3 |
「ORDER BY」句を併用することで人数の多いチームから少ないチームに並び替えることができました。ちなみに、昇順(値が小さいものから大きいものへ)の場合は「ASK」を使用します。
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。
SQL関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
- 「主キー」とは?
- 「外部キー」とは?
- 2023.08.30
- Other
Author:鷺坂りな @TechMania編集部 投稿一覧
Otherカテゴリの最新記事
-
- 2024.10.25
【Excel VBA】VBAでファイルを上書き保存する方法を解説
-
- 2024.10.25
【Excel VBA】ファイル名を取得する方法を解説(ファイルパス、Dir関数、ワイルドカード、サブフォルダ名)
-
- 2024.10.22
【Excel VBA】セルに罫線を引く方法をわかりやすく解説
-
- 2024.10.18
【Excel VBA】正規表現(RegExp)で文字列を操作する方法を解説(検索・抽出・置換)
-
- 2024.10.11
【Excel VBA】Functionの使い方を解説(宣言・引数、戻り値の指定、応用法)
-
- 2024.10.04
【Excel VBA】構造体とは?使い方を解説(宣言・初期化・引数・コピー・定数)