Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez la somme de deux tables jointes

Je suis parfois confronté à ce genre de questions. En raison de plusieurs jointures, les valeurs d'une table particulière sont dupliquées, triplées, etc. Pour résoudre ce problème, je fais normalement un petit hack en divisant la somme (sur une table particulière ) par le nombre d'identifiants distincts de l'autre table. Cela annule l'effet de plusieurs doublons.

Essayez la requête suivante :

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