【ぐるーぷばい】
GROUP BY とは?
最終更新:
💡 データを「グループに分けて」集計するためのSQL句
SQLでレコードを指定したカラムの値ごとにグループ化し、集約関数と組み合わせてグループごとの集計を行う句。
📌 このページのポイント
- 指定したカラムの値や式の結果が同じ行をグループにまとめる
- SUM・COUNT・AVGなどでグループ単位の集計ができる
- WHEREは集計前の行、HAVINGは集計後のグループを絞る
- 表示する列はグループ内で値が定まる必要があり、詳細な規則はDB製品による
GROUP BYってどういうときに使うの?
カテゴリごとの商品数や部署ごとの平均給与など、何かの単位で集計したいときだよ。SELECT category, COUNT(*) FROM products GROUP BY category とすれば、カテゴリごとの行数を数えられる。元の表を書き換える命令ではないよ。
WHEREとHAVINGはどう違うの?
WHEREは集計前の行、HAVINGは集計後のグループを絞る条件だよ。価格1000円以上の商品だけをWHEREで選び、カテゴリ別に数え、その件数が10以上のカテゴリをHAVING COUNT(*) >= 10で残す、と使い分けられるね。
複数のカラムでも分けられる?
GROUP BY category, year なら、カテゴリと年の組み合わせが同じ行ごとにまとめるよ。結果の並び順まで決まるわけではないので、順番が必要ならORDER BYを指定するんだ。
SELECTに好きな列を追加していい?
同じグループの中で値が複数ある列は、そのままではどれを表示するか決まらないよ。基本はグループのキーか集約した値を選ぶ。PostgreSQLでは主キーをGROUP BYに指定すると、その主キーで決まる同じ表の列を選べる場合もある。使うDBの規則を確認しよう。
大量のデータだと遅くなる?
📖 おまけ:英語の意味
「GROUP BY」 = 〜でグループにする
💬 「GROUP(グループにする)」+「BY(〜によって)」で、指定カラムでグループ分けするという意味