Понякога се сблъсквам с подобни въпроси. Поради множество обединения стойностите от определена таблица се дублират, утрояват и т.н. За да поправя това, обикновено правя малък хак, като разделям сумата (на конкретна таблица ) чрез броя на различни идентификатори от други маса. Това отрича ефекта от възникването на множество дубликати.
Опитайте със следната заявка:
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