sql >> Database teknologi >  >> RDS >> Mysql

Sum, subtraher og sammenføj flere mysql-tabelkolonner

Fordi du har flere transaktioner, andre lånebeløb og betalinger pr. kunde, kan du ikke foretage en lige JOIN af tabellerne til hinanden, da det vil forårsage replikering af rækker, hvilket resulterer i forkerte værdier. I stedet SUM alle værdierne i hver tabel på klientbasis før gør JOIN . Derudover, da nogle klienter ikke har poster i hver tabel, skal du bruge LEFT JOIN s og COALESCE på resultaterne, så tomme rækker ikke får SUM til at blive NULL . Denne forespørgsel skulle give dig de ønskede resultater:

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

Output (for dine eksempeldata):

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

Demo på SQLFiddle




  1. 4 typer oplysninger, der skal inkluderes i din CRM-database

  2. Hvornår er det bedre at gemme flag som en bitmaske i stedet for at bruge en associativ tabel?

  3. Multithreading i MySQL?

  4. Automatisering af sikkerhedsrevisioner til PostgreSQL