V podstatě počítáte křížový produkt mezi tdebits
a tcredits
, tj. pro každý řádek v tdebits
iterujete přes všechny řádky v tcredits
. Také není důvod se připojovat k accounts
(pokud není to_account_id
a from_account_id
nejsou cizí klíče).
Stačí provést jednu transakci a stačí vědět, zda se jedná o kreditní nebo debetní částku.
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
Pokud se účet může převést na sebe, přidejte t.to_account_id <> t.from_account_id
.