После присоединения позиций заказа выручка в отчёте выросла вдвое
Отчёт по выручке в разрезе каналов сходился с финансовыми данными. Затем понадобилось добавить разрез по категориям товаров, и в запрос добавили позиции заказа:
SELECT o.channel, SUM(o.amount) AS revenue
FROM orders o
JOIN order_items i ON i.order_id = o.order_id
GROUP BY o.channel;
Выручка выросла примерно вдвое, хотя данные не менялись. Что произошло?
- Соединение один-ко-многим размножило строки, и amount сложился по числу позиций
- SUM после GROUP BY завышает результат при соединениях, нужно писать SUM(DISTINCT o.amount)
- Соединение отбросило заказы без позиций, из-за чего итоговая сумма в отчёте изменилась
- Нужно заменить JOIN на LEFT JOIN — тогда сумма вернётся к прежнему значению
