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

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

Разбор

Если правая таблица имеет максимум одну строку на ключ, каждая строка заказов найдёт не более одного совпадения. В таком случае SUM(order_amount) останется на том же уровне, просто к строкам добавятся атрибуты. А вот JOIN к источнику с отношением «один-ко-многим» или «многие-ко-многим» часто создаёт дубликаты строк и завышает суммы. Поэтому перед агрегацией важно проверять связность ключа справа.

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

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