Вступить в клуб →
средняявопросSQL и проверка данных

Сумма заказов в отчёте выросла вдвое после добавления джойна с платежами

Отчёт по выручке считался так:

SELECT SUM(o.amount) FROM orders o;

Потребовалось добавить способ оплаты, и запрос изменили:

SELECT p.method, SUM(o.amount)
FROM orders o
JOIN payments p ON p.order_id = o.id
GROUP BY p.method;

Общая сумма по всем способам оплаты оказалась заметно больше прежней. Известно, что заказ может быть оплачен частями — по нему бывает несколько платежей.

В чём причина?

  • SUM в сочетании с GROUP BY считает нарастающий итог по группам, поэтому значения накапливаются
  • Соединение один-ко-многим размножило строки заказа: сумма заказа складывается столько раз, сколько у него платежей
  • В таблице payments хранятся суммы с комиссией, поэтому итог получился выше
  • JOIN добавил в выборку заказы, которых не было в исходном запросе: те, что заведены только в таблице payments и по каким-то причинам отсутствуют в orders

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела