В таблице payments три строки со значениями amount: NULL, NULL, NULL. Что вернут запросы SELECT SUM(amount) и SELECT SUM(COALESCE(amount, 0))?

AОба вернут NULL
BSUM(amount) вернёт 0, а SUM(COALESCE(amount, 0)) вернёт NULL
CSUM(amount) вернёт NULL, а SUM(COALESCE(amount, 0)) вернёт 0
DОба вернут 0
Правильный ответ. Агрегаты обычно игнорируют NULL, но если все значения NULL, SUM(amount) вернёт NULL. COALESCE может превратить NULL в 0 до суммирования.

Разбор

Функция SUM не добавляет NULL значения к сумме. Но если нет ни одного не-NULL значения (все NULL), результат суммы считается неопределённым и возвращается NULL. Если же сначала заменить каждое значение через COALESCE(amount, 0), то все NULL превратятся в 0, и сумма будет 0. Это частая техника для устойчивых метрик, когда отсутствие значений нужно трактовать как 0.

Проверь себя · 1/3разбор после ответа
В таблице orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?
Тренировать SQL в Telegram

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