SQL Dojo Bêta
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_idordered
14235.00
L’essayer en Randori

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_idordered
14117.50
L’essayer en Randori