コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

SQLで『COUNT(条件式 OR NULL)』の原理を忘れるので備忘録として書いた

QiitaのほうがMarkdownが綺麗にかけるので、実例込み版はそっちに書いた

qiita.com

要約

  • COUNT(カラム) でカラムがNULLでないものをカウントする
  • カラム には id == 1 のような条件式が指定できる、が条件式は1か0のどちらかが返却されるので全てがカウントされてしまう。
  • OR条件はNULLを組み合わせることにより、 対象 OR NULL とすると 対象が 0 か NULL になると NULLに置き換わる(ただし対象が数値の場合)
  • 条件式 OR NULL にすると、条件にあてはまらないものは全てNULLになる
  • そのため COUNT (条件式 OR NULL) にすると条件式に合致したものが1になり、1のカラムだけをカウントするので意図通りになる

なので条件式の結果が0じゃないと意図しない結果になるので注意されたい。

あとがき

その瞬間は原理を理解してなるほど!ってなるんですが、集計系とかはしばらく離れるとそこら編の記憶がすっとぶのでレジューム用途でかきました。忘れた時にさっと見たい。