Есть LEFT JOIN пользователей с их платежами. Если у пользователя нет платежей, payments.amount будет NULL. Как правильно посчитать «выручку на пользователя», трактуя отсутствие платежей как 0?

ASUM(payments.amount) / COUNT(users.user_id)
BSUM(COALESCE(payments.amount, 0)) / COUNT(users.user_id)
CCOUNT(payments.amount) / SUM(users.user_id)
DSUM(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))?
Тренировать SQL в Telegram

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