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

Aprice * COALESCE(quantity, 1)
BCOALESCE(price * quantity, 1)
CCOALESCE(price, 1) * quantity
DCASE WHEN price IS NULL THEN 1 ELSE price * quantity END
Правильный ответ. Если NULL находится в одном из множителей, замените его до умножения: COALESCE(quantity, 1).

Разбор

При price * quantity и quantity = NULL результат будет NULL. Если по смыслу пропущенное количество нужно трактовать как 1, корректно заменить именно quantity до вычисления: price * COALESCE(quantity, 1). Вариант COALESCE(price * quantity, 1) подменяет целый результат на 1 и нарушит логику, если price не NULL.

Проверь себя · 1/3разбор после ответа
В таблице users столбец is_test может быть 0, 1 или NULL. Нужно исключить тестовых пользователей (где is_test = 1), но оставить остальных, включая NULL. Какой фильтр корректен?
Тренировать SQL в Telegram

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