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