Нужно посчитать выручку как price * quantity, где quantity может быть NULL (поле не заполнили). По бизнес-правилу пропуск нужно трактовать как 1. Какое выражение корректнее?

ACOALESCE(price * quantity, 1): подмена результата на 1 уже после умножения столбцов
BCOALESCE(price, 1) * quantity: замена цены до умножения на исходный множитель quantity
CCASE WHEN quantity IS NULL THEN 1 ELSE price * quantity END: при пропуске возвращает 1
Dprice * 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?
Тренировать SQL в Telegram

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