sql >> Databasteknik >  >> RDS >> Mysql

Summa, subtrahera och sammanfoga flera mysql-tabellkolumner

Eftersom du har flera transaktioner, andra lånebelopp och betalningar per kund kan du inte göra en rak JOIN av tabellerna till varandra eftersom det kommer att orsaka replikering av rader, vilket resulterar i felaktiga värden. Istället SUM alla värden i varje tabell på klientbasis före gör JOIN . Dessutom, eftersom vissa klienter inte har poster i varje tabell, måste du använda LEFT JOIN s och COALESCE på resultaten så att tomma rader inte gör att SUMMA blir NULL . Den här frågan bör ge dig de resultat du vill ha:

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

Utdata (för dina exempeldata):

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

Demo på SQLFiddle




  1. Hur man släpper identitetsegenskapen för en kolumn i SQL Server-tabellen - SQL Server / T-SQL självstudie 44

  2. Hur man tar reda på storleken på index i mysql (inklusive primärnycklar)

  3. mysql räknas endast för distinkta värden i den förenade frågan

  4. Okänt kolumnfel i denna COUNT MySQL-sats?