В каком случае SUM(order_amount) после JOIN скорее всего останется корректным, без эффекта duplication?

AСоединить orders с order_items по order_id, потому что это one-to-many
BСоединить orders с payments по user_id, потому что так проще
CСоединить orders с users по user_id, если в users one-to-one cardinality (одна строка на пользователя)
DСоединить orders с product_tags по product_id, потому что теги не влияют на деньги
Правильный ответ. Атрибутный JOIN к таблице с one-to-one cardinality не размножает строки, поэтому SUM() не искажается.

Разбор

Если правая таблица имеет максимум одну строку на ключ, то каждая строка orders найдёт не более одного совпадения. В таком случае SUM(order_amount) останется на том же уровне, просто добавятся атрибуты. А вот JOIN к one-to-many или many-to-many источнику часто создаёт duplication и завышает суммы.

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

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