QiitaのほうがMarkdownが綺麗にかけるので、実例込み版はそっちに書いた
要約
COUNT(カラム)
でカラムがNULLでないものをカウントするカラム
にはid == 1
のような条件式が指定できる、が条件式は1か0のどちらかが返却されるので全てがカウントされてしまう。- OR条件はNULLを組み合わせることにより、
対象 OR NULL
とすると 対象が 0 か NULL になると NULLに置き換わる(ただし対象が数値の場合) 条件式 OR NULL
にすると、条件にあてはまらないものは全てNULLになる- そのため
COUNT (条件式 OR NULL)
にすると条件式に合致したものが1になり、1のカラムだけをカウントするので意図通りになる
なので条件式の結果が0じゃないと意図しない結果になるので注意されたい。
あとがき
その瞬間は原理を理解してなるほど!ってなるんですが、集計系とかはしばらく離れるとそこら編の記憶がすっとぶのでレジューム用途でかきました。忘れた時にさっと見たい。