1

我正在构建一个 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 的结果太高了。我似乎得到了双重计数。我究竟做错了什么?是否可以在单个查询中执行此操作?

感谢您的回复!

4

2 回答 2

0

看起来您不是按客户分组的。C.customerid 或类似的东西。

于 2012-11-26T17:05:48.110 回答
0

似乎问题在于,当您将订单表连接到具有销售率和采购率的表时,您将获得这两个表的笛卡尔积。 ,这两个表中的每一行对另一个表中的每个对应行重复一次。以下查询应通过在将销售率和采购率连接到其他表之前对每个订单的费率求和来解决此问题:

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 回答