Когда предварительная агрегация до соединения таблиц является ошибкой? Вы хотите посчитать выручку по категории товара, имея order_items(order_id, product_id, item_revenue) и products(product_id, category).

AНи в одном случае: предварительная агрегация до JOIN ускоряет запрос и сохраняет верный результат при любой схеме
BКогда таблица products мала и помещается в оперативную память воркера при выполнении JOIN на больших данных
CКогда целевой уровень измерения это позиция заказа, и агрегировать по category нужно уже после соединения таблиц
DКогда в колонках item_revenue или category встречаются значения NULL, что может исказить итоговую сумму выручки
Правильный ответ. Если целевая метрика на уровне позиции, pre-aggregate до JOIN может уничтожить нужную детализацию.

Разбор

Категория — атрибут товара, поэтому без JOIN order_items с products вы не знаете, к какой категории относится выручка. Если заранее свернуть до уровня order_id, вы потеряете разрез по товарам и категориям. В таких задачах правильнее агрегировать после JOIN на нужном уровне, контролируя cardinality и риск duplication.

Проверь себя · 1/3разбор после ответа
После JOIN таблиц users и events по user_id (связь один-ко-многим) вы хотите получить число пользователей, у которых был хотя бы один ивент. Какой расчёт даст корректное число?
Открыть Карьерник в Telegram

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