COALESCE / NULLIF の使い方
NULL を置き換える
書き方
COALESCE(値, 代わりの値, …) NULLIF(a, b)
COALESCE は最初の NULL でない値を返します。NULLIF は a と b が同じなら NULL(0 での割り算よけに)。
よく使うオプション
| オプション | 意味 |
|---|---|
COALESCE(a, b, …) | 左から見て、最初の NULL でない値を返す |
NULLIF(a, b) | a と b が同じなら NULL、違えば a を返す |
例
SELECT name, COALESCE(phone, '未登録') AS phone FROM customers; name | phone
------+--------------
山田 | 03-1234-5678
木村 | 未登録
(2 rows)電話番号が無い客には「未登録」と出します。表の値は変わりません。
SELECT name, COALESCE(manager_id, id) FROM employees;
上司がいなければ自分の番号を出します。候補はいくつでも並べられます。
SELECT SUM(total) / NULLIF(COUNT(*), 0) FROM orders WHERE status = 'paid';
件数が 0 のときは NULL で割るので、0 で割るエラーになりません。
よくある間違い・注意
- COALESCE の候補は同じ型にそろえます。数の列に '未登録' を並べるとエラーになるので、先に CAST で文字列にします。
- Oracle の NVL(a, b) や MySQL の IFNULL(a, b) も同じ働きですが、COALESCE はどのデータベースでも使えます。
実際に打って練習する
SQL コースの Lv13「空欄を埋める COALESCE」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。