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)
Задание
ЛегкоДоступные таблицы и столбцы:
<strong>users</strong>:<strong>id</strong>,<strong>display_name</strong>,<strong>email</strong><strong>orders</strong>:<strong>user_id</strong>,<strong>amount</strong>
Верните по одной строке для каждого пользователя со следующими полями:
idlabel: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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.