SQL

SQLデータ分析入門#8『基本的な関数を知る』

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

スコープ

  • IF()が使えるようになる
  • その他の関数もなんとなく知っておく

'#5で

※ 関数とは、ある作業を勝手にやってくれる魔法の呪文、くらいに考えておいてください。

って言ってましたが、今はその理解でいいです。
本章読み終えたら、もすこし理解がすすんでいるはず。

※ 今後「hogehoge()」と書いたら、頭のなかで「hogehoge関数」と読み替えてください

IF()の仕組み

IF(条件, 条件を満たすとき, 条件を満たさないとき)

とSELECT句の中に書くと、条件に応じて違う表示をさせることができます。
なお、条件を満たすときをTRUE、そうでないときをFALSEと呼びます。

例えば

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

(前章の補足)Userテーブルに課金ユーザかどうかの情報を紐付けたい。

(Premium_UserにIDがある人を課金ユーザとします)

SELECT *
FROM
   User u
   LEFT JOIN Premium_User pu ON u.ID = pu.user_id

このように書くと、こんな集計がされて、
image.png

このような結果が返ります。
LEFT JOINでは、もし調べてくっつけるものがなかったら、nullが入ります。
image.png

これで、nullじゃない人が課金ユーザとわかるのですが、ちょっと汚いですよね。
これをIF()を使って解決します。

【きれいに!】Userテーブルに課金ユーザかどうかの情報を紐付けたい。

SELECT
   u.id
   , IF(pu.user_id is null, "無課金", "課金")
FROM
   User u
   LEFT JOIN Premium_User pu ON u.ID = pu.user_id

~ is nullは、~がnullのときにTRUE、そうでないときにFALSEが返ってくる比較演算子です。

すると、このような結果になります。
image.png

ユーザの何%が課金しているかしりたい!

もう少し進んだ集計をしてみましょう。

SELECT
   AVG(IF(pu.user_id is null, 0, 1))
FROM
   User u
   LEFT JOIN Premium_User pu ON u.ID = pu.user_id

この結果は、
image.png
と課金者比率となりますが理由はわかりましたか?
わかった方はこの先は読み飛ばしてください。わからない方はもう少し読み進めてください。

複雑なことをして集計する場合は、集計まえのテーブルのイメージを持つことが大事です。
集計前のテーブルを出力してみましょう。

SELECT
   IF(pu.user_id is null, 0, 1)
FROM
   User u
   LEFT JOIN Premium_User pu ON u.ID = pu.user_id

image.png
無課金は0、課金は1が入ったテーブルができています。
このとき、課金者の比率を計算したければ、4人/9人=44%ですね。
では、IF(…)を平均する数式はどうでしょう。同様に4/9=44%となります。
そこで、IF(…)をAVG()でくくってあげて最初のSQLを書いたわけです。
マジックのような集計ですが、比較的便利でよく使うのでぜひ覚えておいてください。

その他のよく使う関数など

この記事も良さそう
【初級編⑦】SQLのSELECT文で関数を使いこなす | SQLServer2008虎の巻

DATE_FORMAT(タイムスタンプ, 日付形式)

例えば、DATE_FORMAT('2018-01-05 12:34:56', '%Y/%m')というデータであれば、
2018-01と年月だけになります。
月ごとの集計をする際などに便利な関数です。

CASE WHEN ~ ELSE ~ END

条件分岐が多い場合、IF()で書くと非常に読みにくくなります。
そういうときはCASE式がおすすめです。

IFの代わりにこのように書きます。詳しくは調べてください。

CASE
   WHEN hoge = 1  then "イチ"
   WHEN hoge >= 2 then "二いじょう"
   ELSE "ゼロいか"
END

RIGHT(なんか)

右1文字をとってきます。
下一桁が1~5のユーザについて集計したい、といったときにおすすめです。

なお、RIGHT(なんか, 持ってきたい文字数)とすると、任意の文字数を取得できます。

推薦図書

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