2

未払いの口座残高がある顧客を表示するレポートを作成しようとしていますが、左結合を使用して機能させることができないようです。

顧客、購入、支払いの 3 つのテーブルがあり、合計購入費用が支払いを差し引いた金額が 0 より大きい顧客を表示しようとしています。

これまでのところ、次のクエリがあります。

mysqli_query("SELECT customers.name as name, SUM(purchases.cost) as cost, SUM(payments.paymentamount) as payments FROM customers 
LEFT JOIN purchases ON purchases.customerid = customers.id 
LEFT JOIN payments ON payments.customerid = customers.id 
WHERE (cost - payments) > 0 
GROUP BY customers.id");

なぜこれが機能しないのか誰にも分かりますか?

助けてくれてありがとう!

4

1 に答える 1

2

customerID誤った結果を避けるために、サブクエリで各合計を計算する必要があります。

SELECT  a.*,
        COALESCE(b.totalPurchase , 0) - COALESCE(c.totalPayment , 0) AS Balance
FROM    customers a
        LEFT JOIN
        (
            SELECT  customerid, SUM(cost) totalPurchase
            FROM    purchases
            GROUP   BY customerid
        ) b ON a.ID = b.customerID
        LEFT JOIN
        (
            SELECT  customerid, SUM(paymentamount) totalPayment
            FROM    payments
            GROUP   BY customerid
        ) c ON a.ID = c.customerID
WHERE   COALESCE(b.totalPurchase , 0) - COALESCE(c.totalPayment , 0) > 0
于 2013-04-07T14:40:36.780 に答える