Jeg står til tider over for den slags forespørgsler. På grund af flere joinforbindelser bliver værdier fra en bestemt tabel duplikeret, tredoblet osv. For at rette op på dette laver jeg normalt et lille hack ved at dividere summen (på en bestemt tabel ) efter antallet af forskellige id(er) fra andet bord. Dette ophæver effekten af, at der sker flere dubletter.
Prøv følgende forespørgsel:
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