В таблице payments три строки со значениями amount: NULL, NULL, NULL. Что вернут запросы SELECT SUM(amount) и SELECT SUM(COALESCE(amount, 0))?
AОба вернут
NULLB
SUM(amount) вернёт 0, а SUM(COALESCE(amount, 0)) вернёт NULLC
SUM(amount) вернёт NULL, а SUM(COALESCE(amount, 0)) вернёт 0DОба вернут 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'?Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без email. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует (равен `NULL`)?
- В таблице `orders` поле `promo_code` может быть `NULL`. Что произойдёт со строкой, где `promo_code` = `NULL`, при фильтре `WHERE promo_code <> 'NONE'`?
- В таблице `sessions` 5 строк. Значения `utm_source`: `'google'`, `NULL`, `'email'`, `NULL`, `NULL`. Чему равны `COUNT(*)` и `COUNT(utm_source)`?
- Что вернёт выражение `COALESCE(NULL, NULL, 'web', 'app')`?
- Дано выражение: `CASE WHEN status = 'paid' THEN amount ELSE 0 END`. Что вернётся, если `status` = `NULL` и `amount` = 500?
- Все вопросы по «Выражения и NULL» →