1

MySQLクエリを作成していますが、正しく取得できないようです。

私は4つのテーブルを持っています:
-顧客
-注文
-sales_rates
-purchase_rates

顧客と注文の間には1:nの関係「顧客」があります。
ordersとsales_ratesの間には1:nの関係「ordernr」があります。ordersとpurchase_ratesの間には1:nの関係「ordernr」があります。

私がやりたいのは、すべての顧客の購入と販売の合計額を出力することです。

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

SELECT c.customernr, c.customer_name, SUM(sr.sales_price) AS sales_price, SUM(pr.purchase_price) AS purchase_price
FROM orders o, customers c, sales_rates sr, purchase_rates pr
WHERE o.customernr = c.customernr
AND o.ordernr = sr.ordernr
AND o.ordernr = pr.ordernr
GROUP BY c.customer_name

sales_priceとpurchase_priceの結果が高すぎます。私は二重のカウントを得ているようです。私は何が間違っているのですか?これを単一のクエリで実行することは可能ですか?

ご返信ありがとうございます!

4

2 に答える 2

0

顧客ごとにグループ化しているようには見えません。C.customeridまたはそのようなもの。

于 2012-11-26T17:05:48.110 に答える
0

問題は、注文テーブルを販売率と購入率のテーブルに結合すると、後者の2つのテーブルのデカルト積が得られることです。 つまり、これら2つのテーブルの各行は、他のテーブルの対応する行ごとに1回繰り返されます。次のクエリは、販売率と購入率を他のテーブルに結合する前に、各注文の率を合計することによってこの問題を解決する必要があります。

SELECT c.customernr, c.customer_name,
       SUM(sr.sales_price) AS sales_price,
       SUM(pr.purchase_price) AS purchase_price
FROM customers c
INNER JOIN orders o
ON o.customernr = c.customernr
LEFT JOIN (SELECT ordernr, SUM sales_price) AS sales_price
           FROM sales_rates
           GROUP BY ordernr) sr
ON sr.ordernr = o.ordernr
LEFT JOIN (SELECT ordernr, SUM(purchase_price) AS purchase_price
           FROM purchase_rates
           GROUP BY ordernr) pr
ON pr.ordernr = o.ordernr
GROUP BY c.customernr, c.customer_name;
于 2012-11-26T19:22:46.847 に答える