Menu
Coddy logo textTech

COALESCE для NULL

Часть раздела Продвинутый уровень путешествия по SQL на Coddy — урок 3 из 27.

COALESCE возвращает первый аргумент, который не является NULL:

COALESCE(nickname, first_name, 'Anonymous')

Читает слева направо и останавливается на первом значении, отличном от null. Это самый чистый способ предоставить резервное значение в запросе без необходимости использования CASE.

Распространенные варианты использования:

  • Отображение 0 вместо NULL при LEFT JOIN: 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>

Верните по одной строке для каждого пользователя со следующими полями:

  • id
  • label: display_name, если задано, иначе email, иначе 'unknown'
  • total_spent: сумма amount заказов пользователя; для пользователей без заказов должно отображаться 0 (а не NULL)

Сортировка по id. Подсказка: LEFT JOIN из users к orders вместе с COALESCE(SUM(...), 0) обрабатывает отсутствующие строки.

Шпаргалка

COALESCE возвращает первый не-NULL аргумент:

COALESCE(nickname, first_name, 'Anonymous')

Распространенные варианты использования:

  • Резервное значение для отображения: COALESCE(mobile, home, work)
  • Замена NULL из агрегатов LEFT JOIN: COALESCE(SUM(amount), 0)

Попробуйте сами

SELECT u.id,
       -- label через COALESCE
       -- total_spent через COALESCE(SUM(...), 0)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id
ORDER BY u.id
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Продвинутый уровень