これはめちゃくちゃ便利なので、メモメモ。
例えば
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じゃない限り実用に耐えうるきがする。
他にも色々と使えそうな演算子があったので、
一度きちんと勉強したほうがよさそうだなー
count() じゃなくて sum() ですね。
countしちゃうと全部同じになっちゃいます。
caseで1か0に振り分けて、それをsumで足し算します。
結果として1になったものの数がわかるという仕組みです。
コメントありがとうございます。
sum()の場合1,0でやるとおもいますが、
count() にして 1 or null にしても同じ結果じゃないでしょうか?
count() で 1,0だと全部同じ結果になっちゃいますね
Pingback: ITキヲスク | 2010年10/17~10/23の週間ブックマーク
助かりました。
めっちゃ、便利です。
コメントありがとうございます。
少しでも参考になれば幸いです。
まあ
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式 の分トラフィックが減る
コメントありがとうございます。
なるほど、こういう書き方も可能なんですね!
勉強になりました。情報ありがとうございます。