SQLにはCASE句を代表とする様々な条件式が存在するが、今回は値がNullだった場合に別の値に置き換えるCOALESCE関数を紹介する。

まず、以下の例を見てみよう。

SELECT
	CAST(request_time as date) as access_date
	, prefecture as prefecture_name
	, COUNT(*) as pv
FROM
	access_log_wide as a
	LEFT JOIN customer_locations as l
	ON a.customer_id = l.customer_id
GROUP BY
	access_date
	, prefecture_name
ORDER BY
	access_date
;

ある二つのテーブルを結合して、日・都道府県ごとのPV数をクロス集計したクエリだが、都道府県の列に一部Null値が含まれている。

例えばNullを「不明」など別のテキストに置き換えたい場合などに、COALESCE関数が有効だ。

先ほどのクエリを以下のように書き直してみる。

SELECT
	CAST(request_time as date) as access_date
	, COALESCE(prefecture, '不明') as prefecture_name
	, COUNT(*) as pv
FROM
	access_log_wide as a
	LEFT JOIN customer_locations as l
	ON a.customer_id = l.customer_id
GROUP BY
	access_date
	, prefecture_name
ORDER BY
	access_date
;

3行目でCOALESCE関数が使われており、第一引数に対象のカラム名を、第二引数にNullと置き換える代替値を指定する。

これを実行するとNullが「不明」に替わり、以下の結果を得ることができる。