Tôi phải đối mặt với loại truy vấn này đôi khi. Do nhiều phép nối, các giá trị từ một bảng cụ thể bị trùng lặp, gấp ba lần, v.v. Để khắc phục điều này, tôi thường thực hiện một hack nhỏ bằng cách chia tổng (trên một bảng cụ thể ) bằng số lượng (các) Id khác biệt với khác bàn. Điều này phủ nhận tác động của nhiều lần trùng lặp xảy ra.
Hãy thử truy vấn sau:
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