Вы сделали LEFT JOIN usersevents по user_id, чтобы сохранить пользователей без событий. Как корректно посчитать количество пользователей на соединённой таблице, не попав в ловушку duplication?

AИспользовать COUNT(DISTINCT user_id)
BИспользовать COUNT(*), так как это LEFT JOIN
CИспользовать COUNT(event_id), чтобы учесть пользователей без событий
DИспользовать SUM(event_id)
Правильный ответ. После LEFT JOIN к one-to-many источнику пользователи дублируются, поэтому для количества пользователей нужен distinct по user_id.

Разбор

LEFT JOIN сохраняет всех пользователей, но добавляет по строке на каждое совпавшее событие, создавая duplication. COUNT(*) в таком датасете будет ближе к числу событий, а COUNT(event_id) игнорирует строки без событий, где справа NULL. COUNT(DISTINCT user_id) вернёт число уникальных пользователей, включая тех, у кого справа NULL.

Проверь себя · 1/3разбор после ответа
В events(user_id, event_id) у пользователя может быть много строк, и в orders(user_id, order_id) тоже много строк. Вы соединяете их по user_id. Какая cardinality получается на ключе и как это влияет на строки?
Открыть Карьерник в Telegram

Ещё вопросы по теме «JOIN и кардинальность»