Нужен датасет на уровне user_id: выручка из orders и число сессий из sessions. В обеих таблицах по пользователю много строк (one-to-many). Какой подход минимизирует риск join explosion?

AСделать JOIN orders и sessions по user_id, а затем посчитать SUM() и COUNT(*)
BСделать JOIN, а потом применить distinct ко всем колонкам
CУдалить все строки кроме первой в orders, чтобы стало one-to-one
DСначала pre-aggregate orders до 1 строки на user_id и отдельно pre-aggregate sessions, затем соединить агрегаты
Правильный ответ. Для метрик на уровне пользователя сначала делают pre-aggregate источников до нужной cardinality, и только потом соединяют.

Разбор

Если соединить «сырые» orders и sessions, получится many-to-many по user_id и вы получите duplication строк. В результате денежные и счётные метрики будут завышены. Предварительная агрегация до одной строки на пользователя сохраняет правильный уровень данных и делает соединение ближе к one-to-one.

Проверь себя · 1/3разбор после ответа
В orders 120 строк (по одной на order_id). В order_items ровно по 3 строки на каждый order_id. Сколько строк будет после соединения ordersorder_items по order_id и почему?
Открыть Карьерник в Telegram

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