Karena Anda memiliki banyak transaksi, jumlah pinjaman lain, dan pembayaran per pelanggan, Anda tidak dapat melakukan JOIN
langsung tabel satu sama lain karena akan menyebabkan replikasi baris, menghasilkan nilai yang salah. Sebagai gantinya, kami SUM
semua nilai dalam setiap tabel berdasarkan klien sebelum melakukan JOIN
. Selain itu, karena beberapa klien tidak memiliki entri di setiap tabel, Anda harus menggunakan LEFT JOIN
s dan COALESCE
pada hasil sehingga baris kosong tidak menyebabkan SUM menjadi NULL
. Kueri ini akan memberikan hasil yang Anda inginkan:
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 (untuk data sampel Anda):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0