Poiché hai più transazioni, altri importi di prestito e pagamenti per cliente, non puoi fare un semplice JOIN
delle tabelle tra loro in quanto causerà la replica delle righe, con conseguenti valori errati. Invece, SUM
tutti i valori all'interno di ogni tabella su base client prima facendo il JOIN
. Inoltre, poiché alcuni client non hanno voci in ogni tabella, devi utilizzare LEFT JOIN
se COALESCE
sui risultati in modo che le righe vuote non facciano diventare SUM NULL
. Questa query dovrebbe darti i risultati desiderati:
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 (per i tuoi dati di esempio):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0