2012-11-26 492 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