Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta SQL para calcular o saldo da conta


Você está basicamente calculando o produto cruzado entre um tdebits e tcredits , ou seja, para cada linha em tdebits você está iterando em todas as linhas em tcredits . Também não há motivo para participar de accounts (a menos que to_account_id e from_account_id não são chaves estrangeiras).

Você só precisa fazer uma transação de repasse e só precisa saber se o valor é crédito ou débito.
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

Se uma conta puder ser transferida para si mesma, adicione um t.to_account_id <> t.from_account_id .