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