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

Selecione Soma de duas tabelas unidas


Eu enfrento esse tipo de perguntas às vezes. Devido a várias junções, os valores de uma tabela específica são duplicados, triplicados, etc. Para corrigir isso, normalmente faço um pequeno hack dividindo a soma (em uma tabela específica ) pela contagem de IDs distintos dos outros tabela. Isso anula o efeito de várias duplicatas acontecendo.

Tente a seguinte consulta:
select i.id, 
       (sum(pr.amount * pr.quantity) / IF(count(distinct pm.id) > 0, count(distinct pm.id), 1) as productAmount, 
       (sum(pm.amount) / IF(count(distinct pr.id) > 0, count(distinct pr.id), 1) as paymentAmount
from invoices as i
left join products as pr on pr.invoice_id=i.id
left join payments as pm on pm.invoice_id=i.id
group by i.id