Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sum, Subtract und Join mehrerer MySQL-Tabellenspalten

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

Demo auf SQLFiddle