Сумма заказов в отчёте выросла вдвое после добавления джойна с платежами
Отчёт по выручке считался так:
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
