Về cơ bản, bạn đang tính toán sản phẩm chéo giữa các tdebits
và tcredits
, tức là cho mỗi hàng trong tdebits
bạn đang lặp lại tất cả các hàng trong tcredits
. Cũng không có lý do gì để tham gia vào tài khoản accounts
(trừ khi to_account_id
và from_account_id
không phải là khóa ngoại).
Bạn chỉ cần thực hiện một lần chuyển qua các giao dịch và bạn chỉ cần biết số tiền đó là tín dụng hay ghi nợ.
SELECT SUM(CASE WHEN t.to_account_id = $1 THEN t.amount ELSE -t.amount END) AS amount
FROM transactions AS t
WHERE (t.to_account_id = $1 OR t.from_account_id = $1)
AND t.succeed = true
Nếu tài khoản có thể tự chuyển sang tài khoản, hãy thêm t.to_account_id <> t.from_account_id
.