【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
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る