COALESCE による NULL 処理
CoddyのSQLジャーニー「応用」セクションの一部 — レッスン 3/27。
COALESCE は、NULL ではない最初の引数を返します:
COALESCE(nickname, first_name, 'Anonymous')左から右に読み取り、最初の非NULL値で停止します。これは、CASE を必要とせずに、クエリ内でフォールバック値を提供するための最もクリーンな方法です。
一般的な使用例:
LEFT JOINからのNULLの代わりに0を表示する:COALESCE(SUM(amount), 0)- 最初の空でないオプションフィールドを選択する:
COALESCE(mobile, home, work)
チャレンジ
簡単利用可能なテーブルとカラム:
<strong>users</strong>:<strong>id</strong>,<strong>display_name</strong>,<strong>email</strong><strong>orders</strong>:<strong>user_id</strong>,<strong>amount</strong>
ユーザーごとに1行を以下の内容で返してください:
idlabel:display_nameが設定されている場合はその値、そうでなければemail、それもなければ'unknown'total_spent: ユーザーの注文のamountの合計。注文がないユーザーは0(NULLではなく)を表示すること
id で並べ替えてください。ヒント: users から orders への LEFT JOIN と COALESCE(SUM(...), 0) を組み合わせることで、注文データがない行を処理できます。
チートシート
COALESCE は、最初の非 NULL 引数を返します:
COALESCE(nickname, first_name, 'Anonymous')一般的な用途:
- フォールバック表示値:
COALESCE(mobile, home, work) LEFT JOINの集計結果に含まれるNULLの置き換え:COALESCE(SUM(amount), 0)
自分で試してみよう
SELECT u.id,
-- COALESCE による label
-- COALESCE(SUM(...), 0) による total_spent
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id
ORDER BY u.id
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。