Piège
Fan-out de jointure
Joindre deux tables « un à plusieurs » multiplie les lignes, et les sommes grossissent avec.
Une commande de 3 lignes et 2 paiements donne 6 lignes si l'on joint les deux : chaque ligne est comptée deux fois. Agrégez chaque table au grain de la commande d'abord, puis joignez les résultats.
Le piège
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 correction
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 |