Jag möter den här typen av frågor ibland. På grund av flera kopplingar blir värden från en viss tabell duplicerade, tredubblade etc. För att fixa detta gör jag normalt ett litet hack genom att dividera summan (på en specifik tabell ) efter antalet distinkta id(n) från andra tabell. Detta förnekar effekten av att flera dubbletter inträffar.
Försök med följande fråga:
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