[SQL]case式は置換作業


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版 初級者で終わりたくないあなたへ