どうも、はらぐちです。
本来は NULL を撲滅すべきなのですが、
MySQLで値が NULL のデータを、どうしても集計(count)してみたくなったもので……
というわけで、やってみました!
やりたかった事
以下のようなテーブルとデータがあるとして
テーブル data +-------+ | value | +-------+ | aaa | | aaa | | aaa | | aaa | | bbb | | bbb | | NULL | | NULL | | NULL | +-------+
それぞれの値の数を集計するために、以下のSQLを実行したら
SELECT value,count(value) FROM data GROUP BY value;
結果
+-----------+--------------+ | value | count(value) | +-----------+--------------+ | NULL | 0 | | aaa | 4 | | bbb | 2 | +-----------+--------------+
NULLのカウントは 0 になって集計できない……
これをなんとか集計したい!
解決策
COALESCE関数を使う
引数を順番に評価し、NULL と評価されない最初の式の現在の値を返し、
すべての引数がNULLの場合はNULLを返すという関数です。
例えば以下の場合
COAESCE(value,value2,'abc')
valueカラムが null の場合は value2 を返す。 value2も null の場合は 'abc' という値を返す
という動きになります。
これを踏まえて、はじめのSQLを以下のように編集
SELECT value,count(COALESCE(value,'')) FROM data GROUP BY value;
結果
+-----------+---------------------------+ | value | count(COALESCE(value,'')) | +-----------+---------------------------+ | NULL | 3 | | aaa | 4 | | bbb | 2 | +-----------+---------------------------+
値が NULL のレコード数がカウントできました!
ばんざい。