Вы соединили orders с order_items и payments по order_id, а затем посчитали SUM(paid_amount). Сумма оказалась завышенной. Что вероятнее всего произошло и как исправить?

AПроблема в том, что используется INNER JOIN; нужно заменить на LEFT JOIN.
BПроблема из-за NULL в paid_amount; нужно обернуть сумму в COALESCE.
CСтроки умножились (мультипликация) из-за нескольких строк в order_items и payments; нужно агрегировать каждую таблицу до уровня order_id перед JOIN.
DНужно заменить JOIN на UNION, чтобы убрать дубликаты.
Правильный ответ. При соединении нескольких таблиц уровня one-to-many по одному ключу строки могут умножаться и завышать суммы.

Разбор

Если у заказа 3 позиции в order_items и 2 платежа в payments, то после соединения получится 6 строк на один заказ. Тогда SUM(paid_amount) посчитает один и тот же платёж несколько раз. Типичный фикс: сначала агрегировать order_items до одной строки на order_id (например, сумма или количество позиций) и отдельно агрегировать payments до одной строки на order_id, и только потом соединять эти агрегаты с orders.

Проверь себя · 1/3разбор после ответа
Аналитик переписал запрос, поменяв порядок таблиц в цепочке JOIN. Запрос стал выполняться быстрее. Почему это могло произойти?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»