SQL Dojo Beta
Falle

Join-Fan-out

Ein Join mit zwei 1:n-Tabellen vervielfacht die Zeilen, und die Summen wachsen mit.

Eine Bestellung mit 3 Positionen und 2 Zahlungen ergibt 6 Zeilen, wenn Sie beide joinen: Jede Position wird doppelt gezählt. Aggregieren Sie zuerst jede Kindtabelle auf die Granularität der Bestellung, dann joinen Sie die Ergebnisse.

Die Falle

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
In Randori ausprobieren

Die Korrektur

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
In Randori ausprobieren