Du beräknar i princip korsprodukten mellan en tdebits och tcredits , d.v.s. för varje rad i tdebits du itererar över alla rader i tcredits . Det finns heller ingen anledning att gå med i accounts (såvida inte to_account_id och from_account_id är inte främmande nycklar).
Du behöver bara göra en övergångstransaktion och du behöver bara veta om beloppet är en kredit eller debet.
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
Om ett konto kan överföras till sig självt, lägg till ett t.to_account_id <> t.from_account_id .