SQLデータ分析入門#4『LIMIT句を理解する』 - Qiita
の続き
本記事のスコープ
- あるテーブルのあるカラムについて、合計・カウント・平均を出せるようにする
- その時、「集計関数」と「GROUP BY 句」が(基本的に)ニコイチなことを理解する
集計関数とは
- レコードを集計したいときに使う関数
- 例えば、合計はSUM()関数、平均はCOUNT()関数を使う
- その時「何毎に集計したいのか」(例えば、性別ごと、日付ごと)を指定するのが「GROUP BY 句」
※ 今後「hogehoge()」と書いたら、頭のなかで「hogehoge関数」と読み替えてください
※ 関数とは、ある作業を勝手にやってくれる魔法の呪文、くらいに考えておいてください。
例えば
全ユーザの身長の平均を知りたい
SELECT AVG(身長)
FROM User
男女別に、全ユーザの身長の平均を知りたい
SELECT
性別
, AVG(身長)
FROM User
GROUP BY 性別 -- 性別で分類するという宣言
GROUP BY はかんたんにこのようにも書ける。実行結果は一緒
SELECT
性別
, AVG(身長)
FROM User
GROUP BY 1 -- 「SELECT」の一番最初の項目、すなわち性別で分類するという宣言
男女、出身別に、全ユーザの身長の平均と人数を知りたい
SELECT
性別
, 出身
, AVG(身長)
, COUNT(*) -- レコード数を数える
FROM User
GROUP BY 1, 2 -- 「SELECT」の1つめと2つめの項目で分類する宣言
※ 唐突に出てきた「null」は「何も情報が入っていない」という意味、分析上「不明」として扱うことが多い
男性に絞って、出身別に平均身長が知りたい
SELECT
出身
, AVG(身長)
, COUNT(*) -- レコード数を数える
FROM User
WHERE 性別 = "m"
GROUP BY 1
~句、順番のルール
~句の順番は決まっていて、例えば、
SELECT
出身
, AVG(身長)
GROUP BY 1
FROM User
WHERE 性別 = "m"
のようにはかけないのでこの順番は守るべし。
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
※ HAVINGはこの入門シリーズでは解説しない、ORDER BYは次章で解説する
推薦図書
よくあるSQL本はエンジニア向けなのですが、この本は分析をしたいだけの人に向いてます。
前後の記事
SQLデータ分析入門#1『SQLってなんだ』 - Qiita
SQLデータ分析入門#2『SELECT ~ FROM ~ を理解する』 - Qiita
SQLデータ分析入門#3『WHERE句を理解する』 - Qiita
SQLデータ分析入門#4『LIMIT句を理解する』 - Qiita
SQLデータ分析入門#5『集計関数を理解する』 - Qiita
SQLデータ分析入門#6『結果の順番をいい感じにする』 - Qiita
SQLデータ分析入門#7『複数のテーブルにまたがって集計する』 - Qiita
SQLデータ分析入門#8『基本的な関数を知る』 - Qiita