私は3つのテーブルを持っています
請求書: ID、クライアント
サービス: invice_id、価格
支払い: 請求書 ID、金額
請求書ごとに、サービス価格が amountDue であり、支払い額が amountPaid であるすべての請求書を選択したいと考えています。
たとえば、次の行があるとします。
請求書
id = 1, client = 232
id = 2, client = 535
サービス
invoice_id = 1, price = 5.00
invoice_id = 1, price = 10.00
invoice_id = 2, price = 20.00
支払い
invoice_id = 1, amount = 7.00
invoice_id = 2, amount = 12.00
invoice_id = 2, amount = 8.00
すべての請求書行の結果のクエリを次のようにしたい:
請求書
id = 1, client = 232, amountDue = 15.00, amountPaid = 7.00
id = 2, client = 535, amountDue = 20.00, amountPaid = 20.00
次のようなクエリがありました。
SELECT invoices.*,
sum(services.price) AS amountDue,
sum(payments.amount) AS amountPaid
FROM invoices
LEFT JOIN services ON services.invoice = invoices.id
LEFT JOIN payments ON invoices.id = payments.invoice
GROUP BY invoices.id
しかし、結果の amountPaid は、各請求書のサービス数で乗算されていました。
1 つのクエリですべてのデータを取得する方法はありますか?