COALESCEとNULLIF
デフォルト値を指定し、ゼロ除算を避けます。
「COALESCEとNULLIF」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
欠損値の置き換え
NULLを検出するだけでは十分ではありません — 多くの場合、NULLを適切なデフォルト値に置き換える必要があります。SQLのCOALESCE関数は、まさにそのためのものです。
また、ゼロ除算を避けるなどの目的でNULLを意図的に作成する場合は、NULLIFを使います。このレッスンでは、この2つの関数を扱います。
-- Show a placeholder when phone is missing
SELECT name, COALESCE(phone, 'no phone on file') AS phone
FROM customers;COALESCEの動作
COALESCEは任意の数の引数を受け取り、左から順に確認して最初のNULLでない値を返します。
すべての引数がNULLの場合、結果はNULLです。「これを使い、なければあれを使い、それもなければ最後にこの代替値を使う」と考えるとよいでしょう。
SELECT
COALESCE(NULL, NULL, 'third', 'fourth') AS a, -- 'third'
COALESCE(NULL, 42) AS b, -- 42
COALESCE(NULL, NULL) AS c; -- NULLフォールバックの連鎖
COALESCEは複数の引数を受け取れるため、優先順位に沿った連鎖を作成できます。
たとえば、携帯電話番号を優先し、次に勤務先の電話番号、自宅の電話番号の順に使い、最後にリテラルメッセージを使うことができます。
SELECT name,
COALESCE(mobile, work_phone, home_phone, 'unreachable') AS best_contact
FROM contacts;計算でのデフォルト値
NULLは算術演算を通じて伝播するため、1つの欠損値によって計算全体がNULLになることがあります。NULLになる可能性がある入力をCOALESCEで囲み、中立的な値に置き換えてください。
ここでは、割引が欠損している場合に0として扱います。
-- Without COALESCE, a NULL discount makes total NULL
SELECT
price - COALESCE(discount, 0) AS total
FROM line_items;COALESCEの型ルール
COALESCEのすべての引数は、互換性のある型でなければなりません。PostgreSQLは共通の型を選択し、それができない場合はエラーになります。
たとえば、キャストなしで数値と自由形式の文字列を混在させることはできません — フォールバック値も数値である必要があります。
-- OK: both integers
SELECT COALESCE(score, 0) FROM results;
-- Cast when mixing types
SELECT COALESCE(score::text, 'n/a') FROM results;NULLIFを使う
NULLIF(a, b)は、考え方としてはCOALESCEと逆の動作をします。a = bの場合はNULLを返し、それ以外の場合はaを返します。
特定の「センチネル値」を実際のNULLに変換する簡潔な方法です。
SELECT
NULLIF(5, 5) AS a, -- NULL (equal)
NULLIF(5, 9) AS b, -- 5 (not equal)
NULLIF('', '') AS c; -- NULL (treat empty string as missing)ゼロ除算にNULLIFを使う
NULLIFの典型的な用途は、除算エラーの回避です。0で除算するとエラーになりますが、NULLで除算すると単にNULLになります。
除数をNULLIF(divisor, 0)で囲むと、クラッシュを安全なNULLに変換できます。
-- If total_visits is 0, this would error.
-- NULLIF turns the divisor into NULL, giving a NULL ratio instead.
SELECT
conversions / NULLIF(total_visits, 0) AS conversion_rate
FROM campaigns;NULLIFとCOALESCEの組み合わせ
NULLIFとCOALESCEは相性よく組み合わせられます。NULLIFでセンチネル値をNULLに変換し、続いてCOALESCEでそのNULLにわかりやすいデフォルト値を設定します。
ここでは、空文字列のメモをリテラルテキスト「—」に変換します。
-- Treat '' as missing, then display a dash
SELECT
COALESCE(NULLIF(note, ''), '—') AS display_note
FROM tickets;安全な平均比率
これらを組み合わせると、堅牢な分析クエリを作成できます。NULLIFでゼロ除算を防ぎ、続いてCOALESCEでNULLの代わりに0を表示します。
このクエリはエラーにならず、常に見やすい数値を表示します。
SELECT
product_id,
COALESCE(returns / NULLIF(orders, 0), 0) AS return_rate
FROM product_stats;COALESCEとIS NULLの違い
どちらもNULLを扱いますが、目的は異なります。
IS NULL/IS NOT NULL— 条件の中で欠損値を確認します。COALESCE— 出力する値を置き換えます。
結果を整形するときはCOALESCEを、フィルタリングするときはIS NULLを使ってください。
-- Filter (IS NULL)
SELECT * FROM customers WHERE phone IS NULL;
-- Substitute (COALESCE)
SELECT COALESCE(phone, 'unknown') FROM customers;まとめて使う
このレッスンのクイックリファレンスです。
COALESCE(a, b, c)→ 最初のNULLでない値。NULLIF(a, b)→ 等しい場合はNULL、それ以外の場合はa。- ゼロ除算を避けるには
NULLIF(divisor, 0)を使います。 - 計算や出力にデフォルト値を設定するには
COALESCEを使います。
SELECT
COALESCE(nickname, full_name, 'guest') AS display_name,
revenue / NULLIF(orders, 0) AS avg_order_value
FROM accounts;クイックチェック
amountが0の場合、NULLIF(amount, 0)は何を返しますか。
まとめ
COALESCE(最初のNULLでない値を返す)を使ってNULLをデフォルト値に置き換える方法と、NULLIF(2つの値が一致した場合にNULLを返す)を使って意図的にNULLを作成する方法を学びました。
ゼロ除算を避けるパターンと、両方の関数を連鎖させて安全で見やすい出力を作る方法も確認しました。次は、COUNT、SUM、JOINの中でNULLがどのように動作するかを学びます。
SELECT
COALESCE(NULLIF(comment, ''), 'no comment') AS comment,
total / NULLIF(qty, 0) AS unit_price
FROM invoices;よくある質問
「COALESCEとNULLIF」レッスンは無料ですか?
はい。「COALESCEとNULLIF」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「COALESCEとNULLIF」で何を学びますか?
デフォルト値を指定し、ゼロ除算を避けます。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「COALESCEとNULLIF」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- NULLの本当の意味
- IS NULLとIS NOT NULL
- COALESCEとNULLIF
- 集約とJOINにおけるNULL