【SQL入門】CASE文の使い方
記述方法
CASE文には2つの書き方が存在します。
単純CASE文
CASE sex
WHEN 1 THEN '男'
WHEN 0 THEN '女'
ELSE 'その他'
END 性別
検索CASE文
CASE
WHEN sex = 1 THEN '男'
WHEN sex = 0 THEN '女'
ELSE 'その他'
END 性別
単純CASE文のほうが、シンプルに記載することができますが、
複雑な条件を利用したい場合は、検索CASE文を使うことが多いでしょう。
そのため、実際には検索CASE文を用いる場面のほうが多いと思います。
処理の例
CASE文は以下のようにSELECTの部分に記載されます。
SELECT CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' ELSE 'その他' END 性別 FROM sample_table
処理前のテーブル
| sex |
|---|
| 1 |
| 0 |
| 1 |
処理後のテーブル
| sex | 性別 |
|---|---|
| 1 | 男 |
| 0 | 女 |
| 1 | 男 |
条件(WHENの中)の処理順序
SELECT CASE WHEN col IN ('a', 'b', 'c') THEN 1 --① WHEN col IN ('a') THEN 2 --② ELSE 0 END value FROM sample_table
CASE文の中で記載されたWHENの部分は、上から順番に処理がされます。
そのため、例文で①が処理されたあとに②が処理されるのです。
しかし、①は②の要素も含んだ条件式になっています。
このような場合、①で条件が合致すると②は処理されず、次のレコードの処理に入ります。
そのため、WHENの記載する順序には、注意をしておく必要があります。
ポイント
WHENは上から順に処理される
CASE文との組み合わせ
実際にCASE文を記載する際には、WHENの中は複雑な条件式になる事が多いです。
先ほどの例のように、WHEN sex = 1などの単純な計算になることは少ないです。
WHENの中によく記載するパターンをご紹介させていただきます。
CASE文とIN
先程の例文でもサラッと出てきましたが、
CASE
WHEN col IN ('a', 'b', 'c') THEN 1
ELSE 0
END value
CASE文とLIKE
CASE
WHEN name LIKE '田中%' 1
ELSE 0
END value
正規表現を用いることで、文字列検索して部分一致したものを抽出しております。
この場合は、name列に”田中”と始まるレコードに1をつけております。
CASE文と計算
CASE
WHEN (age + 2) = 10 THEN 1
ELSE 0
END value
対象となる値に対して2を足して、比較をしております。
今回は足し算を行いましたが、四則演算の様々なパターンが入ることがあります。
CASE文とMAX(MIN)
例えば、以下のようなテーブルがあったとします。
| 項目 | 出金額 |
|---|---|
| 食費 | 4000 |
| 家賃 | 50000 |
| 光熱費 | 3000 |
このテーブルに対して、出金額が最も大きい項目にフラグを立てる。
という処理を行いたい場合は、このようなクエリを作成することも可能です。
CASE
WHEN (SELECT MAX(出金額) FROM sample) = 出金額 THEN 1
ELSE 0
END 最高額フラグ
| 項目 | 出金額 | 最高額フラグ |
|---|---|---|
| 食費 | 4000 | 0 |
| 家賃 | 50000 | 0 |
| 光熱費 | 3000 | 1 |
このように、非常に複雑な条件もWHENの中に記載することが可能です。
最後に
CASE文は非常に強力な武器です。
処理を実行する際に、CASE文を用いると処理の幅が大きく広がります。
ぜひ、CASE文を使いこなしましょう!
追記
CASE文の応用的使い方に関しても記事を書きました。
参考文献
入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る