Da Sie mehrere Transaktionen, andere Kreditbeträge und Zahlungen pro Kunde haben, können Sie kein direktes JOIN
durchführen der Tabellen zueinander, da dies zu einer Replikation von Zeilen führt, was zu falschen Werten führt. Stattdessen SUM
wir alle Werte innerhalb jeder Tabelle auf Kundenbasis vorher JOIN
ausführen . Da einige Clients außerdem keine Einträge in jeder Tabelle haben, müssen Sie LEFT JOIN
verwenden s und COALESCE
auf die Ergebnisse, damit leere Zeilen nicht dazu führen, dass SUMs zu NULL
werden . Diese Abfrage sollte Ihnen die gewünschten Ergebnisse liefern:
SELECT c.id, c.name,
COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS amount
FROM client c
LEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS transactions
FROM transaction
GROUP BY id) t on t.id = c.id
LEFT JOIN (SELECT id, SUM(amount) AS amounts
FROM other_loan
GROUP BY id) o ON o.id = c.id
LEFT JOIN (SELECT id, SUM(payment_amount) AS payments
FROM payment
GROUP BY id) p ON p.id = c.id
GROUP BY c.id
Ausgabe (für Ihre Beispieldaten):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0