Нужно посчитать выручку как price * quantity, где quantity может быть NULL (поле не заполнили). По бизнес-правилу пропуск нужно трактовать как 1. Какое выражение корректнее?
A
COALESCE(price * quantity, 1): подмена результата на 1 уже после умножения столбцовB
COALESCE(price, 1) * quantity: замена цены до умножения на исходный множитель quantityC
CASE WHEN quantity IS NULL THEN 1 ELSE price * quantity END: при пропуске возвращает 1D
price * COALESCE(quantity, 1): замена NULL в множителе quantity до умножения на priceПравильный ответ. Если
NULL в одном из множителей, замените именно его до умножения: COALESCE(quantity, 1).Разбор
При price * quantity и quantity = NULL результат всего выражения будет NULL. Корректно заменить именно quantity до вычисления: price * COALESCE(quantity, 1). Вариант COALESCE(price * quantity, 1) подменяет весь результат и нарушает логику, когда price известен. Замена price вместо quantity не помогает: NULL в любом множителе всё равно даст NULL.
Проверь себя · 1/3разбор после ответа
Как поведёт себя фильтр
WHERE country IN ('RU', 'KZ') для строки, где country IS NULL?Ещё вопросы по теме «Выражения и 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» →