Vì bạn có nhiều giao dịch, các khoản vay khác và các khoản thanh toán cho mỗi khách hàng, bạn không thể thực hiện JOIN
ngay lập tức của các bảng với nhau vì nó sẽ gây ra sự sao chép các hàng, dẫn đến các giá trị không chính xác. Thay vào đó, chúng tôi SUM
tất cả các giá trị trong mỗi bảng trên cơ sở khách hàng trước thực hiện JOIN
. Ngoài ra, vì một số ứng dụng khách không có mục nhập trong mỗi bảng, bạn phải sử dụng LEFT JOIN
s và COALESCE
trên kết quả để các hàng trống không khiến SUM trở thành NULL
. Truy vấn này sẽ cung cấp cho bạn kết quả bạn muốn:
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
Đầu ra (cho dữ liệu mẫu của bạn):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0