У товара может быть несколько категорий в таблице product_categories(product_id, category_id), а продажи лежат в sales_lines(product_id, revenue) (много строк на товар). Вы посчитали выручку по категориям после соединения. Что будет, если потом сложить выручку всех категорий в одну цифру?

AСумма будет равна общей выручке, потому что SUM() автоматически убирает duplication
BСумма будет меньше общей выручки, потому что категории фильтруют строки
CСумма может стать больше общей выручки, потому что many-to-many связь создаёт duplication выручки по товарам в нескольких категориях
DСумма станет равна числу товаров из-за COUNT(*)
Правильный ответ. При many-to-many атрибуции один факт может попасть в несколько групп, и суммарные SUM() по группам перестают сходиться.

Разбор

Если товар принадлежит двум категориям, его revenue попадёт в обе группы после JOIN и будет учтён дважды. Это не всегда «ошибка», но тогда нельзя ожидать, что сумма по категориям совпадёт с общей. Чтобы контролировать это, нужно заранее определить правило распределения и учитывать риск duplication.

Проверь себя · 1/3разбор после ответа
Хотите посчитать конверсию «пользователь посмотрел товар → пользователь купил» по user_id. Данные: events (много просмотров на пользователя) и orders (много заказов на пользователя). Что корректнее всего сделать, чтобы избежать many-to-many искажения?
Открыть Карьерник в Telegram

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