sql >> Database >  >> RDS >> Mysql

Optellen, aftrekken en samenvoegen van meerdere mysql-tabelkolommen

Omdat je meerdere transacties, andere leenbedragen en betalingen per klant hebt, kun je niet zomaar een JOIN doen van de tabellen aan elkaar, omdat dit replicatie van rijen veroorzaakt, wat resulteert in onjuiste waarden. In plaats daarvan SUM alle waarden binnen elke tabel op klantbasis voor doe de JOIN . Bovendien, aangezien sommige klanten geen gegevens in elke tabel hebben, moet u LEFT JOIN . gebruiken s en COALESCE op de resultaten zodat lege rijen er niet toe leiden dat SOM's NULL worden . Deze zoekopdracht zou u de gewenste resultaten moeten opleveren:

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

Uitvoer (voor uw voorbeeldgegevens):

id  name        amount
1   Robin       8718
2   Cinderella  21
3   Leomar      0

Demo op SQLFiddle




  1. Stel de AUTO_INCREMENT-waarde in via variabele in MySql

  2. classNotFound Uitzondering bij gebruik van JDBC voor MYSQL op Tomcat in eclipse

  3. Werken met een grote hoeveelheid gegevens uit mysql

  4. Selecteer waarden uit een lijst die niet in een tabel staan