Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona Somma da due tabelle unite

A volte devo affrontare questo tipo di domande. A causa di più join, i valori di una tabella particolare vengono duplicati, triplicati ecc. Per risolvere questo problema, normalmente eseguo un piccolo trucco dividendo la somma (su una tabella particolare ) dal conteggio di ID distinti dall'altro tavolo. Ciò annulla l'effetto di più duplicati.

Prova la seguente query:

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