SQL Dojo Beta
Trappola

Fan-out delle join

Unire due tabelle uno-a-molti moltiplica le righe, e le somme crescono con loro.

Un ordine con 3 righe e 2 pagamenti dà 6 righe quando fai la join con entrambe: ogni riga viene contata due volte. Aggrega prima ogni tabella figlia alla granularità dell'ordine, poi fai la join dei risultati.

La trappola

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
Provalo in Randori

La correzione

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
Provalo in Randori