Protože máte více transakcí, jiné částky úvěru a platby na zákazníka, nemůžete provést rovnou JOIN
tabulek navzájem, protože to způsobí replikaci řádků, což má za následek nesprávné hodnoty. Místo toho SUM
všechny hodnoty v každé tabulce na klientské bázi před provedením JOIN
. Navíc, protože někteří klienti nemají položky v každé tabulce, musíte použít LEFT JOIN
s a COALESCE
na výsledcích, aby prázdné řádky nezpůsobily, že se SUM stanou NULL
. Tento dotaz by vám měl poskytnout požadované výsledky:
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
Výstup (pro vaše ukázková data):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0