目次
GROUP BYとは?
GROUP(グループ)
群れ、集団、かたまり、集まり、(主義・趣味などを同じくする人の)集団、同好会、グループ、(党・教会などの)分派、小党派、…派
Weblio英和辞書
GROUPとは群れ・かたまりを意味し、SQLでも同様に「まとめる」という意味で使います
また記述方法はBYをつけて「GROUP BY」です
エクセルでは「ピボットテーブルを使ったグループ化」のイメージです
しっかり集約のイメージを頭の中で完成させないと
エラーが多発してしまう語法でもありますので
「何をまとめるか」を頭の中で意識しましょう
GROUP BYの使い方
SELECT 【列名】
FROM ***
WHERE ***
GROUP BY 【列名】
GROUP BY句はSELECT句にある列を指定することで、
その列を「まとめる」ことができます
まずはSELECT句に「列名だけ」を記述する方法をご紹介します
「商品名をまとめる」SQLを記述します
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-216.png)
SELECT
商品名
GROUP BY
商品名
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-217.png)
重複なく項目を抽出する方法は「DISTINCT」を使えば抽出することができます
GROUP BY句は「集約関数」と使うことが多く、その場合はDISTINCTは使えません
集約関数を使ったGROUP BY
GROUP BY句は集約関数を一緒に使うケースがほとんど
集約関数とはデータをまとめて計算する方法です
合計する「SUM」や数を数える「COUNT」などがあります
関数 | 概要 |
---|---|
SUM(列名) | 合計 |
AVG(列名) | 平均 |
COUNT(列名) | 件数 |
MAX(列名) | 最大値 |
MIN(列名) | 最小値 |
※集約関数のみ使う
SELECTに「集約関数」を記述することで、データを集約&計算することができます
SELECT
SUM(会計)
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-220.png)
集約関数+GROUP BYを使う
ここから「GROUP BYの本質」
GROUP BYを使えば「項目ごとに集約」することができます
SELECTに「列名」と「集約関数」を両方記述することで、
指定した列をまとめて計算することができます
SELECT
商品名, SUM(会計)
GROUP BY
商品名
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-222.png)
ここがとても分かりにくいので、イメージを段階に沿ってご説明します
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-218.png)
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-221.png)
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-222.png)
よく間違えるポイント
集計関数を使うケースにおいて、間違えやすいポイントがあります
SELECTに集約関数を使っているのに、GROUP BY句を書いていない
言葉だけでは理解しにくいので、SELECT句とGROUP BY句を使った事例で
その違いを見ていきましょう
SELECT
商品名, 会計
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-223.png)
SELECT
商品名, SUM(会計)
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-226.png)
「商品名」はすべての商品を、「会計」は合計を出そうとしているので
最終的な結果の列数が異なってしまいます…
SELECT
商品名, SUM(会計)
GROUP BY
商品名
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-222.png)
これが正解です!
複数項目をまとめる方法
GROUP BY句では複数カラムを並べて記述することができます
書いた順番にまとめることができます
SELECT 【列名1】,【列名2】,【列名3】
FROM ***
WHERE ***
GROUP BY 【列名1】,【列名2】,【列名3】
「テストの平均点をクラス、性別ごとに抽出する」SQLを記述します
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-230.png)
SELECT
クラス, 性別,
AVG(国語), AVG(数学), AVG(英語)
GROUP BY
クラス, 性別
![SQLデータベース抽出の例](https://smart-hint.com/wp-content/uploads/2021/01/image-231.png)
まとめ
今回は「GROUP BY句」についてご紹介してきました
よく使う語法ですが、エラーが頻出するので
しっかりとまとめるイメージをしてください