SQL

【SQL】CASE式で効率よく集計する(CASE WHEN)

本記事概要

本記事の対象者

SQL初心者の方。
主にPMやマーケターの方向け。
Macをお持ちの方。
すでに【SQL練習】サンプルデータベースを用意するでMySQL公式のデータベースをローカルに作成されている方

本記事の目的

CASE式を使って、効率よく集計ができるようになる。
※クエリ書くのは時間がかかるので、効率よく集計できるようになることは非常に重要だと個人的には考えてます。

練習環境

【SQL練習】サンプルデータベースを用意する
で紹介したsakiraデータベースのpaymentテーブルを使います。
まだ自分のパソコンでSQLを叩く環境がない方は、非常に簡単なので、
上記の記事を参考に環境を作ってみてください。

SQLのCASE式で効率よく集計しよう!

paymentテーブル概要

ごく一般的な内容です。
今回はこのpaymentテーブルのamountカラムを使います。

sum case whenで効率よく集計してみる

Q.すべての決済履歴を大口取引・一般的な取引・小口取引の3つに分けて、その割合を調べたいと考えます。

※ここでは決めで、大口取引は10ドル以上/一般的な取引は5ドル以上10ドル未満/小口取引は5ドル未満とします。

集計イメージは以下です。

all large medium small
16,049 114 3,843 12,092

CASE式を使わない場合、以下のようにWHERE句で条件を指定して、4回抽出することになると思います。

すごくめんどくさいですよね。
そこでSUM CASE WHENの出番です。

以下のように書くことで条件分岐をしてくれるので、非常に便利です。

集計結果は以下になります。

10ドル以上の大口決済は全体の約0.7%しかないことがわかります。
ここから大口決済をしているお客様(ここではcustomer_id)をサブクエリで抽出して、その属性を分析するなどは非常におもしろそうです。
この記事ではあくまでもSUM CASE WHENの使い方にフォーカスしているので、突っ込んだ分析には言及しませんが、ぜひお時間ある方はトライしてみてください。

参考

ABOUT ME
Okada Shogo
某Web系企業でアクセス解析やKPI管理をやってます。主にインハウスマーケターの方に向けて情報発信できればと思っております!