LoginSignup
14
16

More than 5 years have passed since last update.

SQLデータ分析入門#7『複数のテーブルにまたがって集計する』

Last updated at Posted at 2018-01-05

SQLデータ分析入門#6『結果の順番をいい感じにする』 - Qiita
の続き

スコープ

  • テーブル同士をくっつけて集計できるようになる
  • 具体的には、「LEFT JOIN」を学ぶ
  • その際に必要となる「ON句」もマスターする

なお、「LEFT JOIN」で殆どの集計ができることから、意図的に他のJOINはスコープ外に置きます。
他には「INNER JOIN」「CROSS JOIN」「OUTER JOIN」などがあるので、興味があれば調べてください。

その前に

Excelと違って、データベースはテーブル数を贅沢に使って情報を貯めることが多いです。

例えばこのような内容を、
image.png

このように格納しています。
image.png

このように、各テーブルが、データを重複なく持っているような状態を「正規化」されていると言います。
詳しくは、データベース正規化 | リレーショナルデータベースのテーブル設計をする上で必要な知識。が詳しいです。

なお、このように正規化されたDBを、テーブル間が相互に関係をもっていることから、
リレーショナル・データベース(RDB)といい、この状態から集計するために「LEFT JOIN」は大変重要です。

基本構造

テーブル①
LEFT JOIN テーブル② ON テーブル①のカラム = テーブル②のカラム

とすると、テーブル①にテーブル②がくっつきます。
例を見たほうが早いです。

例えば

こんなテーブルがあったとき、
image.png

Premium_UserテーブルにIDがある人を課金ユーザとした上で、

課金ユーザの身長・性別が知りたい

SELECT *
FROM
   Premium_User pu
   LEFT JOIN Profile p ON pu.user_id = p.user_id

image.png

Premium_User puはPremium_Userというテーブルにpuというあだ名(alias名)を付けるという意味で、
Profile pも同様にpというあだ名がつけられています

それを踏まえて、FROMの中を見てみると、

Premium_User pu
LEFT JOIN Profile p ON pu.user_id = p.user_id

これは、
「Premium_UserにProfileをくっつけます。」
「その時、puのユーザIDとpのユーザIDが等しいもの同士でくっつけてください」
という意味です。

その結果、こんなくっつき方をしました。
なお、Profileのくっつける先がなかったレコードは無視されます。
image.png

課金ユーザの人数と、平均身長がしりたい

では、集計関数も組み合わせてつかってみましょう。FROMの中は変わりません。

SELECT COUNT(*), AVG(p.身長)
FROM
   Premium_User pu
   LEFT JOIN Profile p ON pu.user_id = p.user_id
GROUP BY 1

結果はこうなります。
image.png

すこし複雑になってきましたが、JOINを使うなど、複雑なことをして集計する場合は、
集計まえのテーブルのイメージを持つことが大事です。

FROMのなかに、
image.png
がいるから、集計すると
image.png
こうなるな、というイメージを持ってください。

推薦図書

よくある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

14
16
1

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
14
16