2012-11-26 25 views
1

我正在建立一個MySQL查詢,但我似乎無法正確。與聯接和GROUP BY的MySQL查詢

我有四個表:
- 客戶
- 訂單
- sales_rates
- purchase_rates

有一個1:n的關係,客戶和訂單之間的 'customernr'。
訂單和sales_rates之間有1:n的關係'ordernr'。訂單和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的結果太高。我似乎越來越重要。我究竟做錯了什麼?是否可以在單個查詢中執行此操作?

感謝您的回覆!

+0

'GROUP BY k.bedrijfsnaam' - 在哪裏聲明表'k'? – PinnyM

回答

0

看來問題在於,當您將訂單表加入銷售率和採購率表時,您會得到這兩個後面表的笛卡爾乘積。 I.e對於另一個表中的每個對應行重複一次這兩個表中的每一行。以下查詢應通過在將銷售費率和購買費率加入其他表格之前總結每個訂單的費率來解決此問題:

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; 
+0

Thanx!這解決了我的問題。 – Edwin

0

它看起來並不像你由顧客分組。 C.customerid或類似的東西。

+0

對不起,我忘了將GROUP BY語句從荷蘭語翻譯成英語。感謝名單。 – Edwin