NULLに対するCOALESCE
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)
チャレンジ
簡単利用可能なテーブルとカラム:
users:id、display_name、orders:user_id、amount
各ユーザーにつき1行を、以下の内容で返してください:
idlabel:display_nameが設定されていればそれを、そうでなければemailを、それもなければ'unknown'を使用しますtotal_spent:ユーザーの注文のamountの合計。注文がないユーザーには0(NULLではない)を表示してください
idの順に並べ替えてください。ヒント:usersからordersへのLEFT JOINとCOALESCE(SUM(...), 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
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
応用のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド