Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie Summe aus zwei verknüpften Tabellen aus

Ich werde manchmal mit solchen Anfragen konfrontiert. Aufgrund mehrerer Verknüpfungen werden Werte aus einer bestimmten Tabelle dupliziert, verdreifacht usw. Um dies zu beheben, mache ich normalerweise einen kleinen Hack, indem ich die Summe dividiere (in einer bestimmten Tabelle). ) durch die Anzahl unterschiedlicher IDs von der anderen Tisch. Dies negiert den Effekt mehrerer Duplikate.

Versuchen Sie die folgende Abfrage:

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