Нужно пометить пользователей, у которых нет заказов, как 'no_orders'. Есть поле orders_count, которое для некоторых пользователей равно NULL (данные не загрузились), а для реально без заказов — 0. Какой CASE корректнее различит эти ситуации?

ACASE WHEN orders_count = 0 THEN 'no_orders' ELSE 'has_orders' END
BCASE WHEN orders_count IS NULL THEN 'no_orders' ELSE 'has_orders' END
CCASE WHEN orders_count = 0 THEN 'no_orders' WHEN orders_count IS NULL THEN 'unknown' ELSE 'has_orders' END
DCASE 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)?
Тренировать SQL в Telegram

Ещё вопросы по теме «Выражения и NULL»