Нужно пометить пользователей, у которых нет заказов, как 'no_orders'. Есть поле orders_count, которое для некоторых пользователей равно NULL (данные не загрузились), а для реально без заказов — 0. Какой CASE корректнее различит эти ситуации?
A
CASE WHEN orders_count = 0 THEN 'no_orders' ELSE 'has_orders' ENDB
CASE WHEN orders_count IS NULL THEN 'no_orders' ELSE 'has_orders' ENDC
CASE WHEN orders_count = 0 THEN 'no_orders' WHEN orders_count IS NULL THEN 'unknown' ELSE 'has_orders' ENDD
CASE WHEN orders_count <> 0 THEN 'has_orders' ELSE 'no_orders' ENDПравильный ответ. Если
NULL и 0 имеют разный смысл, их нужно обрабатывать разными ветками CASE.Разбор
Здесь 0 означает «точно нет заказов», а NULL означает «неизвестно/нет данных». Если их смешать, аналитика будет неверной. Корректный подход: отдельная ветка для 0 и отдельная для IS NULL, например: CASE WHEN orders_count = 0 THEN 'no_orders' WHEN orders_count IS NULL THEN 'unknown' ELSE 'has_orders' END. Это делает смысл признака прозрачным и устойчивым.
Проверь себя · 1/3разбор после ответа
Нужно выбрать пользователей без email. Какое условие в
WHERE корректно найдёт строки, где email отсутствует (равен NULL)?Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без email. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует (равен `NULL`)?
- В таблице `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» →