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

Soma, subtração e junção de várias colunas da tabela mysql


Como você tem várias transações, outros valores de empréstimo e pagamentos por cliente, não é possível fazer um JOIN direto das tabelas entre si, pois isso causará a replicação de linhas, resultando em valores incorretos. Em vez disso, SUM todos os valores dentro de cada tabela com base no cliente antes fazendo o JOIN . Além disso, como alguns clientes não possuem entradas em cada tabela, você deve usar LEFT JOIN se COALESCE nos resultados para que linhas vazias não façam com que SUMs se tornem NULL . Esta consulta deve fornecer os resultados desejados:
SELECT c.id, c.name,
       COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS amount
FROM client c
LEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS transactions
           FROM transaction
           GROUP BY id) t on t.id = c.id
LEFT JOIN (SELECT id, SUM(amount) AS amounts
           FROM other_loan
           GROUP BY id) o ON o.id = c.id
LEFT JOIN (SELECT id, SUM(payment_amount) AS payments
           FROM payment
           GROUP BY id) p ON p.id = c.id
GROUP BY c.id

Saída (para seus dados de amostra):
id  name        amount
1   Robin       8718
2   Cinderella  21
3   Leomar      0

Demonstração no SQLFiddle