Вие основно изчислявате кръстосания продукт между tdebits и tcredits , т.е. за всеки ред в tdebits вие преглеждате всички редове в tcredits . Също така няма причина да се присъединявате към accounts (освен ако to_account_id и from_account_id не са външни ключове).
Трябва да извършите само едно преминаване на транзакции и просто трябва да знаете дали сумата е кредитна или дебитна.
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
Ако акаунт може да се прехвърли към себе си, добавете t.to_account_id <> t.from_account_id .