Trampa
Fan-out de un JOIN
Unir dos tablas uno-a-muchos multiplica las filas, y las sumas crecen con ellas.
Un pedido con 3 líneas y 2 pagos da 6 filas cuando se unen ambas: cada línea se cuenta dos veces. Agregue primero cada tabla hija a la granularidad del pedido y luego una los resultados.
La trampa
SELECT o.order_id, SUM(l.quantity * l.unit_price) AS ordered FROM orders o JOIN order_lines l ON l.order_id = o.order_id JOIN payments p ON p.order_id = o.order_id WHERE o.order_id = 14 GROUP BY o.order_id;
| order_id | ordered |
|---|---|
| 14 | 235.00 |
La corrección
SELECT o.order_id, SUM(l.quantity * l.unit_price) AS ordered FROM orders o JOIN order_lines l ON l.order_id = o.order_id WHERE o.order_id = 14 GROUP BY o.order_id;
| order_id | ordered |
|---|---|
| 14 | 117.50 |