Сумма оплат по заказу в отчёте втрое больше реальной: где ошибка в запросе
Вы сверяете витрину с данными сервиса:
SELECT o.id, sum(p.amount) AS paid
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN payments p ON p.order_id = o.id
GROUP BY o.id;
По заказу с тремя позициями и одной оплатой на 1 500 рублей запрос показывает 4 500.
Что произошло?
- Функция sum() пропускает пустые значения, из-за чего итог получается завышенным
- Соединение с позициями размножило строки, и одна оплата просуммировалась столько раз, сколько в заказе позиций
- Нужно заменить GROUP BY на DISTINCT: он уберёт задвоенные строки, и суммы в витрине совпадут
- Оплаты попали в выборку несколько раз, потому что в запросе нет фильтра по статусу платежа
