Вы хотите заменить NULL в столбце источника перехода на значение 'direct'. Какой вариант записан корректно и эквивалентен по смыслу?
A
CASE WHEN referrer IS NULL THEN 'direct' ELSE referrer END и COALESCE(referrer, 'direct')B
CASE WHEN referrer = NULL THEN 'direct' ELSE referrer END и COALESCE(referrer, 'direct')C
CASE WHEN referrer IS NULL THEN 'direct' ELSE referrer END и COALESCE('direct', referrer)D
CASE WHEN referrer IS NOT NULL THEN 'direct' ELSE referrer END и COALESCE(referrer, 'direct')Правильный ответ.
COALESCE(referrer, 'direct') — короткая запись «если значение NULL, подставь значение по умолчанию».Разбор
Логика «подставь значение по умолчанию при NULL» записывается через CASE WHEN ... IS NULL, но COALESCE(referrer, 'direct') обычно короче и читабельнее. Запись referrer = NULL некорректна и всегда даёт UNKNOWN — для проверки на пропуск используют IS NULL. Порядок аргументов в COALESCE важен: функция возвращает первый не-NULL слева направо, поэтому COALESCE('direct', referrer) всегда вернёт 'direct' и не выполнит замену. Условие IS NOT NULL тоже меняет смысл — оно подставит 'direct' именно туда, где значение есть.
Можно заниматься бесплатно
Готовим вопросы…
Три вопроса по теме этой страницы, с объяснениями.
Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без электронной почты. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует?
- В таблице `orders` поле `promo_code` может быть `NULL`. Что произойдёт со строкой, где `promo_code = NULL`, при фильтре `WHERE promo_code <> 'NONE'`?
- В таблице `sessions` 5 строк. Значения `utm_source`: `'google'`, `NULL`, `'email'`, `NULL`, `NULL`. Чему равны `COUNT(*)` и `COUNT(utm_source)`?
- В таблице `payments` три строки со значениями `amount`: `NULL`, `NULL`, `NULL`. Что вернут запросы `SELECT SUM(amount)` и `SELECT SUM(COALESCE(amount, 0))`?
- Что вернёт выражение `COALESCE(NULL, NULL, 'web', 'app')`?
- Все вопросы по «Выражения и NULL» →