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が「不明」に替わり、以下の結果を得ることができる。