Vous calculez essentiellement le produit croisé entre un tdebits
et tcredits
, c'est-à-dire pour chaque ligne dans tdebits
vous parcourez toutes les lignes de tcredits
. Il n'y a pas non plus de raison de rejoindre des accounts
(sauf si to_account_id
et from_account_id
ne sont pas des clés étrangères).
Vous n'avez qu'à faire un seul passage sur les transactions et vous avez juste besoin de savoir si le montant est un crédit ou un débit.
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
Si un compte peut être transféré vers lui-même, ajoutez un t.to_account_id <> t.from_account_id
.