MYSQL で IF(CASE)文が便利 7

PLでしかできないとおもっていたんですが、
実はMYSQLでも CASE って使えるんですね。

これはめちゃくちゃ便利なので、メモメモ。

例えば

tableA に 性別カラム (clmA) (1=男,2=女,3=その他)があって

男のレコードの数
女のレコードの数
その他のレコードの数

を1発のSQLで出すことができます。

SELECT
count( CASE WHEN clmA=1 THEN 1 ELSE null END ) as “Men”
count( CASE WHEN clmA=2 THEN 1 ELSE null END ) as “Women”
count( CASE WHEN clmA=3 THEN 1 ELSE null END ) as “Others”
FROM tableA

ほかにも

CASE WHEN 1>0 THEN “true” ELSE “false”

みたいな書き方も可能だし、
もちろんネストも可能。

しかも意外と処理も早いので、
わりとヘビーなDBじゃない限り実用に耐えうるきがする。

他にも色々と使えそうな演算子があったので、
一度きちんと勉強したほうがよさそうだなー

7 thoughts on “MYSQL で IF(CASE)文が便利

  1. Reply t 10月 8,2010 10:44 AM

    count() じゃなくて sum() ですね。
    countしちゃうと全部同じになっちゃいます。
    caseで1か0に振り分けて、それをsumで足し算します。
    結果として1になったものの数がわかるという仕組みです。

  2. Reply admin 10月 8,2010 12:57 PM

    コメントありがとうございます。

    sum()の場合1,0でやるとおもいますが、
    count() にして 1 or null にしても同じ結果じゃないでしょうか?
    count() で 1,0だと全部同じ結果になっちゃいますね

  3. Pingback: ITキヲスク | 2010年10/17~10/23の週間ブックマーク

  4. Reply ttrd 4月 11,2011 8:09 PM

    助かりました。
    めっちゃ、便利です。

  5. Reply admin 4月 13,2011 11:57 AM

    コメントありがとうございます。
    少しでも参考になれば幸いです。

  6. Reply alice 10月 15,2012 2:37 PM

    まあ

    count( CASE WHEN clmA=1 THEN 1 ELSE null END ) as “Men”

    より

    sum(clmA=1) as “Men”,
    sum(clmA=2) as “Women”,
    sum(clmA=3) as “Other”

    でいいとおもう。

    case式 の分トラフィックが減る

  7. Reply admin 11月 20,2012 10:09 AM

    コメントありがとうございます。
    なるほど、こういう書き方も可能なんですね!
    勉強になりました。情報ありがとうございます。

Leave a Reply