コマンド道場

$ man coalesce

COALESCE

条件・NULL の関数

引数を左から見て、最初に NULL でなかった値を返す。NULL の穴埋めに使う。

呼び出しの形

COALESCE(値1, 値2, ...)

つまずきやすいところ

  • すべての引数が NULL なら結果も NULL です。必ず値がほしいなら、最後の引数を必ず NULL にならないものにしてください。

  • 引数の型はそろえる必要があります。COALESCE(数値の列, '未設定') は型変換に失敗します。

  • COALESCE必要な分しか評価しません。左が NULL でなければ右は評価されないので、重い副問い合わせを右に置くのは理にかなっています。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

NULL を文字で埋めて表示する
SELECT kokyaku_name, pref, COALESCE(pref, '未登録') AS hyouji FROM kokyaku ORDER BY kokyaku_id
kokyaku_nameprefhyouji
青葉工業東京都東京都
白樺物産大阪府大阪府
黒松システム東京都東京都
赤坂商会NULL未登録
三田商事愛知県愛知県

5

0 行の合計を 0 にそろえる
SELECT COALESCE(SUM(suryo), 0) AS goukei FROM juchu_meisai WHERE juchu_id = 9999
goukei
0

1

COALESCE が無ければ NULL になります。

説明

COALESCE は引数を左から順に見て、最初に NULL でなかったものを返します。すべて NULL なら NULL です。引数はいくつでも並べられます。

いちばん多い使い道は「表示のための穴埋め」です。COALESCE(pref, '未登録') と書けば、NULL の代わりに文字を出せます。

計算での使い道も重要です。SUM は対象が 0 行のとき NULL を返すので、COALESCE(SUM(...), 0) と包んで 0 にそろえます。|| による文字列連結も、NULL が混じると全体が NULL になるため、つなぐ前に COALESCE で埋めます。

⚠️ 引数の型はそろえてください。数値の列に文字列の既定値を渡すと、型変換できずエラーになります。

ほかの製品でも通るか

主要 7 製品で通用 そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database / IBM Db2

製品ごとの対応表(根拠つき)を見る

次に読む

関係する関数

根拠にした一次情報