###SQLにおけるCASE文のイメージと使い方
イメージ
- 列の値を別の読み方に置換する
- ↑の機能により、SUMやAVERAGEと組め合わせると嬉しい
具体例(1) ~CASEのシンプルな機能~
コード
SELECT CASE prefecture
WHEN '高知' THEN '四国'
WHEN '愛媛' THEN '四国'
WHEN '香川' THEN '四国'
WHEN '徳島' THEN '四国'
ELSE NULL /*(ELSEはNULLの時は書く必要ないが、書いたほうがわかりやすいと思う)*/
END /*(最後にENDは必須)/*
結果
prefecture prefecture
ーー ーー
高知 四国
愛媛 ➡ 四国
香川 四国
徳島 四国
実際の機能はこれだけ。
次に、これが威力発揮させる場面(SUM等の集計関数との組み合わせ)について。
具体例(2) ~CASEが威力を発揮す場面~
やりたいこと
テーブル名:PopTbl
prefecture | population |
---|---|
高知 | 100 |
愛媛 | 200 |
香川 | 300 |
徳島 | 400 |
福岡 | 500 |
佐賀 | 600 |
長崎 | 700 |
東京 | 800 |
群馬 | 900 |
この表を↓のようにしたい場合
prefecuture | population |
---|---|
四国 | 1000 |
九州 | 1800 |
その他 | 1700 |
つまり、別の名前でまとめて計算したい | |
→CASE文!! |
コード
SELECT CASE prefecture
WHEN '高知' THEN '四国'
WHEN '愛媛' THEN '四国'
WHEN '香川' THEN '四国'
WHEN '徳島' THEN '四国'
WHEN '福岡' THEN '九州'
WHEN '佐賀' THEN '九州'
WHEN '長崎' THEN '九州'
ELSE 'その他'
END AS districrt
SUM(population)
FROM PopTbl
GROUP BY district
解説
- CASEで置換後のテーブルの様子を districtと定義
- ↑により、GROUP BY で置換後の名前を使ってまとめられる
CASE文を書く時のイメージ
いつものSELECT文で名前を置換したい列名のところをCASE文で挟むイメージ
SELECT A B C FROM ~
とあったときに、Aの読み方を変えたい!と思ったら
⇒SELECT CASE A WHEN ~THEN~ELSE~END B C FROM ~
参考図書
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ