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

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

Разбор

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

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

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