Menu
Coddy logo textTech

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)
challenge icon

チャレンジ

簡単

利用可能なテーブルとカラム:

  • <strong>users</strong>: <strong>id</strong>, <strong>display_name</strong>, <strong>email</strong>
  • <strong>orders</strong>: <strong>user_id</strong>, <strong>amount</strong>

ユーザーごとに1行を以下の内容で返してください:

  • id
  • label: display_name が設定されている場合はその値、そうでなければ email、それもなければ 'unknown'
  • total_spent: ユーザーの注文の amount の合計。注文がないユーザーは 0NULL ではなく)を表示すること

id で並べ替えてください。ヒント: users から orders への LEFT JOINCOALESCE(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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン