( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【SQL】GROUP BY|まとめて集計する方法

GROUP BYとは?

GROUP(グループ)

群れ、集団、かたまり、集まり、(主義・趣味などを同じくする人の)集団、同好会、グループ、(党・教会などの)分派、小党派、…派

Weblio英和辞書

GROUPとは群れ・かたまりを意味し、SQLでも同様に「まとめる」という意味で使います

また記述方法はBYをつけて「GROUP BY」です

エクセルでは「ピボットテーブルを使ったグループ化」のイメージです

しっかり集約のイメージを頭の中で完成させないと

エラーが多発してしまう語法でもありますので

何をまとめるか」を頭の中で意識しましょう

GROUP BYの使い方

SELECT 【列名】

FROM ***

WHERE ***

GROUP BY 【列名】

GROUP BY句はSELECT句にある列を指定することで、

その列を「まとめる」ことができます

まずはSELECT句に「列名だけ」を記述する方法をご紹介します

お題

「商品名をまとめる」SQLを記述します

SQLデータベース抽出の例
SELECT
    商品名

GROUP BY
    商品名
SQLデータベース抽出の例
DISTINCTで良いのでは?

重複なく項目を抽出する方法は「DISTINCT」を使えば抽出することができます

GROUP BY句は「集約関数」と使うことが多く、その場合はDISTINCTは使えません

集約関数を使ったGROUP BY

GROUP BY句は集約関数を一緒に使うケースがほとんど

集約関数とはデータをまとめて計算する方法です

合計する「SUM」や数を数える「COUNT」などがあります

関数概要
SUM(列名)合計
AVG(列名)平均
COUNT(列名)件数
MAX(列名)最大値
MIN(列名)最小値

※集約関数のみ使う

SELECTに「集約関数」を記述することで、データを集約&計算することができます

SELECT
    SUM(会計)
SQLデータベース抽出の例

集約関数+GROUP BYを使う

ここから「GROUP BYの本質

GROUP BYを使えば「項目ごとに集約」することができます

SELECTに「列名」と「集約関数」を両方記述することで、

指定した列をまとめて計算することができます

SELECT
    商品名, SUM(会計)

GROUP BY
    商品名
SQLデータベース抽出の例

ここがとても分かりにくいので、イメージを段階に沿ってご説明します

「商品名」をまとめて、「会計」を合計する
SQLデータベース抽出の例
「商品名」をまとめる
SQLデータベース抽出の例
「会計」を合計する
SQLデータベース抽出の例

よく間違えるポイント

集計関数を使うケースにおいて、間違えやすいポイントがあります

SELECTに集約関数を使っているのに、GROUP BY句を書いていない

言葉だけでは理解しにくいので、SELECT句とGROUP BY句を使った事例で

その違いを見ていきましょう

SELECTのみ
SELECT
    商品名, 会計
SQLデータベース抽出の例
SELECT+集約関数
SELECT
    商品名, SUM(会計)
SQLデータベース抽出の例
エラーが出ます

「商品名」はすべての商品を、「会計」は合計を出そうとしているので

最終的な結果の列数が異なってしまいます…

SELECTのみ
SELECT
    商品名, SUM(会計)

GROUP BY
    商品名
SQLデータベース抽出の例

これが正解です!

複数項目をまとめる方法

GROUP BY句では複数カラムを並べて記述することができます

書いた順番にまとめることができます

SELECT 【列名1】,【列名2】,【列名3】

FROM ***

WHERE ***

GROUP BY 【列名1】,【列名2】,【列名3】

お題

テストの平均点をクラス、性別ごとに抽出する」SQLを記述します

SQLデータベース抽出の例
SELECT
    クラス, 性別,
    AVG(国語), AVG(数学), AVG(英語)

GROUP BY
    クラス, 性別
SQLデータベース抽出の例

まとめ

今回は「GROUP BY句」についてご紹介してきました

よく使う語法ですが、エラーが頻出するので

しっかりとまとめるイメージをしてください

コメントを残す

メールアドレスが公開されることはありません。