Есть LEFT JOIN пользователей с их платежами. Если у пользователя нет платежей, payments.amount будет NULL. Как правильно посчитать «выручку на пользователя», трактуя отсутствие платежей как 0?
A
SUM(payments.amount) / COUNT(users.user_id)B
SUM(COALESCE(payments.amount, 0)) / COUNT(users.user_id)C
COUNT(payments.amount) / SUM(users.user_id)D
SUM(users.user_id) / COUNT(COALESCE(payments.amount, 0))Правильный ответ. После
LEFT JOIN отсутствующие значения становятся NULL; для метрик часто подставляют 0 через COALESCE перед агрегированием.Разбор
При LEFT JOIN строки без совпадений получают NULL в полях правой таблицы. Если вы хотите считать отсутствие платежей как 0, безопасно заменить payments.amount на 0 до суммирования: SUM(COALESCE(payments.amount, 0)). Деление на COUNT(users.user_id) даёт среднее по всем пользователям, включая тех, у кого платежей не было.
Проверь себя · 1/3разбор после ответа
В таблице
payments три строки со значениями amount: NULL, NULL, NULL. Что вернут запросы SELECT SUM(amount) и SELECT SUM(COALESCE(amount, 0))?Ещё вопросы по теме «Выражения и 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)`?
- В таблице `payments` три строки со значениями `amount`: `NULL`, `NULL`, `NULL`. Что вернут запросы `SELECT SUM(amount)` и `SELECT SUM(COALESCE(amount, 0))`?
- Что вернёт выражение `COALESCE(NULL, NULL, 'web', 'app')`?
- Все вопросы по «Выражения и NULL» →