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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る