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 .