Выручка в витрине выросла в разы после присоединения позиций заказа
В витрину продаж добавили присоединение таблицы позиций, чтобы потом вытащить категории товаров. Сумма выручки за месяц сразу выросла в несколько раз по сравнению с источником.
SELECT o.order_id,
sum(o.amount) AS amount
FROM dds.orders o
JOIN dds.order_items i ON i.order_id = o.order_id
GROUP BY o.order_id;
В чём причина расхождения?
- Соединение один-ко-многим размножает строку заказа по числу его позиций, и o.amount суммируется столько раз, сколько позиций в заказе.
- В order_items есть строки-сироты без соответствующего заказа, и при соединении они добавляют в результат суммы по несуществующим заказам.
- GROUP BY по order_id недостаточно: без client_id в группировке заказы разных клиентов с совпадающими номерами схлопываются в одну группу и суммы складываются.
- sum() в PostgreSQL приводит numeric к типу большей разрядности и округляет промежуточные значения вверх, отчего итог заметно растёт на больших объёмах.
