SQL CASE

これをマスター

SQLCASEでピボット分析をマスターしましょう!

マスター 売上をピボットしよう

 
 
テーブル: sales
 取引ID取引日店舗ID商品ID個数合計金額
174/1/203521250
2114/1/203272700
3194/1/203462500
4324/1/203232500
5334/1/203341245
6394/1/203321300
7504/1/203492600
8534/1/203601375
9594/1/203512600
10624/1/203492600
結果: (スペース都合で5行のみ表示)
 取引ID取引日店舗ID商品ID合計金額レンジ
174/1/20352250300円未満
2114/1/20327700500円以上
3194/1/20346500500円以上
4324/1/20323500500円以上
5334/1/20334245300円未満

テーマ

売上を金額のレンジごとに集計してみよう

はじめに

CASEの説明をネットには「複数のステートメントのグループのいずれかを実行」などとあります、、、
うーん。なんかすっと入って来ないですね

では、簡単にお天気の例で言い変えてみましょう
「明日、晴れだったらピクニック
雨だったら映画
そうじゃなかったらショッピング」
みたいな事を処理してくれるコマンドです

もし1だったらAで
もし2だったらBで
もし3だったらCで
その他ならEで

詳しく

CASE WHEN 条件A THEN 結果A
    WHEN 条件B THEN 結果B
    WHEN 条件C THEN 結果C
    WHEN 条件D THEN 結果D
    ELSE 結果E
END

CASEは
ざっくり言うと
ExcelのIF関数を、条件分だけいっぱい並べるイメージです

Excel通の方はお気づきかもですが2016から追加されたIFSと同じ役割です
IFSのSQLバージョンのイメージです

ExcelのIFS関数と見比べてみましょう

IFS( 条件A, 結果A, 条件B, 結果B, 条件C, 結果C )

CASE
WHEN 条件A THEN 結果A
WHEN 条件B THEN 結果B
WHEN 条件C THEN 結果C

ELSD 結果D
END

最初のCASEと最後のENDは、ここからここまでの合図なので置いておいて

IFS 関数の 条件の部分が、CASEではWHEN に変わっいて
条件にマッチするとTHENの後の処理されます
条件があるだけ、WHENをどんどん追加出来ます
IFSを縦に並べただけに見えますよね

(CASEも横一文で
CASE WHEN 条件A THEN 結果A WHEN 条件B THEN 結果B
と書く事も出来ますが見易さを考慮して縦に並べて書かれる事が多いです)

では最初のテーブルの例を詳しくみてみましょう

お客さんが購入された合計金額を
300円以上、500円以上、1000円以上、300円未満のレンジに
振分けしています

WHEN に続く条件で順にマッチングしていき
どれにもあてはまらない場合はELSEの結果が表示されます
このサンプルではどこのWHENでも金額指定されてない「300円未満」が該当します

この例では単純に
各レコードごとに、金額がどのレンジにあるかを出しているだけで
Excelピボットのような集計はされていません

集計はGROP BY と組み合わせる事で行う事ができますので

もう一歩、進んでみてみましょう

もう一歩

上の例では、金額レンジを振り分けるだけでしたが
ピボット集計する方法も見ていきましょう

やりたい事は、金額のレンジ事に何個の注文が入っていたかを
GROPY BYとCOUNTを使って集計していきます

GROP BYやCOUNTについては別ペ
ージで詳しくシェアしてますので良かったらご覧になってください

COUNTは集計をする為の演算子で非常に良く使われます
他には、SUM、AVG、MIAX、MIN、AVGなども合わせて使われます

 
 
テーブル: sales
 取引ID取引日店舗ID商品ID個数合計金額
174/1/203521250
2114/1/203272700
3194/1/203462500
4324/1/203232500
5334/1/203341245
6394/1/203321300
7504/1/203492600
8534/1/203601375
9594/1/203512600
10624/1/203492600
結果: (スペース都合で5行のみ表示)
 レンジボリューム合計最小最大平均
1300円未満2795245250248
2300円以上2675300375337.5
3500円以上63500500700583.3
4
5

あわせてご覧ください

EXCEL INDIRECT

Excel

Excel EOMONTHの使い方を分かりやすい例で紹介

Read More

SQL HAVING

SQL

SQL Tips

Read More