LoginSignup
11
9

More than 5 years have passed since last update.

SQLデータ分析入門#5『集計関数を理解する』

Last updated at Posted at 2018-01-05

SQLデータ分析入門#4『LIMIT句を理解する』 - Qiita
の続き

本記事のスコープ

  • あるテーブルのあるカラムについて、合計・カウント・平均を出せるようにする
  • その時、「集計関数」と「GROUP BY 句」が(基本的に)ニコイチなことを理解する

集計関数とは

  • レコードを集計したいときに使う関数
  • 例えば、合計はSUM()関数、平均はCOUNT()関数を使う
  • その時「何毎に集計したいのか」(例えば、性別ごと、日付ごと)を指定するのが「GROUP BY 句」

※ 今後「hogehoge()」と書いたら、頭のなかで「hogehoge関数」と読み替えてください
※ 関数とは、ある作業を勝手にやってくれる魔法の呪文、くらいに考えておいてください。

例えば

こんなテーブルがあったときの実行結果
image.png

全ユーザの身長の平均を知りたい

SELECT AVG(身長)
FROM User

image.png

男女別に、全ユーザの身長の平均を知りたい

SELECT
   性別
   , AVG(身長)
FROM User
GROUP BY 性別 -- 性別で分類するという宣言

image.png

GROUP BY はかんたんにこのようにも書ける。実行結果は一緒

SELECT
   性別
   , AVG(身長)
FROM User
GROUP BY 1 -- 「SELECT」の一番最初の項目、すなわち性別で分類するという宣言

男女、出身別に、全ユーザの身長の平均と人数を知りたい

SELECT
   性別
   , 出身
   , AVG(身長)
   , COUNT(*) -- レコード数を数える
FROM User
GROUP BY 1, 2 -- 「SELECT」の1つめと2つめの項目で分類する宣言

image.png

※ 唐突に出てきた「null」は「何も情報が入っていない」という意味、分析上「不明」として扱うことが多い

男性に絞って、出身別に平均身長が知りたい

SELECT
   出身
   , AVG(身長)
   , COUNT(*) -- レコード数を数える
FROM User
WHERE 性別 = "m"
GROUP BY 1

スクリーンショット 2018-01-05 22.27.56.jpg

~句、順番のルール

~句の順番は決まっていて、例えば、

SELECT
   出身
   , AVG(身長)
GROUP BY 1
FROM User
WHERE 性別 = "m"

のようにはかけないのでこの順番は守るべし。

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
  7. 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

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9