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