fukumotcho’s blog

<div data-iframe-width="150" data-iframe-height="270" data-share-badge-id="52907283-c5b4-4e26-9ffc-21524b605b68" data-share-badge-host="https://www.credly.com"></div><script type="text/javascript" async src="//cdn.credly.com/assets/utilities/embed.js"></s

単純CASE式と検索CASE式について

CASE式には、単純CASE式と検索CASE式があります。

 

単純CASE式の型

CASE 〇〇

 WHEN ’A’ THEN 'AA'

 WHEN 'B' THEN 'BB'

ELSE 'その他' END

〇〇がAのときAA、BのときBB、それ以外のときはその他

 

検索CASE式の型

CASE WHEN 〇〇 = ’A’ THEN 'AA'

    WHEN 〇〇 = 'B' THEN 'BB'

ELSE 'その他' END

これも同じく、〇〇がAのときAA、BのときBB、それ以外のときはその他

という意味

 

・単純CASE式のほうが簡潔に書けるが、できることも限られている

・単純CASE式で書ける式は、検索CASE式でも書くことができる

・真になるWHEN句が見つかった時点で打ち切られて、残りのWHEN句は無視されるから注意する

 

'2番'が表示されることは絶対にない例

CASE WHEN col_1 IN ('a','b') THEN '1番'

  WHEN col_1 IN ('a') THEN '2番'

ELSE 'その他' END

col_1 に 'a' または 'b' が含まれているとき '1番'

col_1 に 'a'  が含まれているとき '2番'

 

そらそうや。

 

注意点1

  • 返ってくる値の型を統一する
  • 返ってくる値が、1つは文字型、もう1つは数値型というのは認められない

注意点2

  • ENDを書き忘れないようにする
  • CASE式にENDは必須

注意点3

  • ELSEは必ず書くようにクセをつける
  • 書かなくてもエラーにはならないが、書いた方がミスが減るし、バグが発生したときに修正しやすい

簡潔にいうと、、、

CASE式は、簡単にいうとラベルの読み替えを行っているだけ。

  • Aが1のときは男
  • Aが2のときは女

など。

しかし、集約関数(SUMやAVG)とGROUP BYと組み合わせると、絶大な効果を発揮する。