Правильный ответ: 🔥 два
JOIN создали четыре строки для одного заказа.У заказа №42 было:
- 2 строки в
order_items- 2 строки в
paymentsПосле соединения таблиц база получила 2 × 2 = 4 строки. В каждой из них осталось
o.total = 1000, поэтому SUM(o.total) сложил одну и ту же сумму четыре раза.orders не содержит дублей. Дубли появились в результате соединения таблиц.SUM(DISTINCT o.total) здесь не является надёжным исправлением. Если два разных заказа стоят одинаково, один из них потеряется в подсчёте.Если нужна выручка по заказам, не присоединяй таблицы «один ко многим» до подсчёта суммы:
SELECT o.id, o.total AS revenueFROM orders o;А если нужны товары и платежи, сначала собери их отдельно по
order_id, а потом присоедини к заказу.