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

AЭто many-to-many: строки по каждому user_id перемножаются, возможен join explosion
BЭто one-to-one: по каждому user_id будет ровно одна строка
CЭто one-to-many: число строк станет равно числу пользователей
DЭто one-to-one, если добавить distinct
Правильный ответ. Два источника, где по ключу много строк, при JOIN дают many-to-many и риск join explosion.

Разбор

Если у пользователя 5 событий и 2 заказа, после JOIN получится 10 строк только для него. Это и есть duplication, которая ломает COUNT(*), SUM() и даже AVG() при неверном уровне анализа. Чтобы избежать, выбирают правильный ключ соединения или делают pre-aggregate до нужной гранулярности.

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

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