Вие основно изчислявате кръстосания продукт между 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
.