Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用连接和分组方式的MySQL查询_Mysql_Join_Group By - Fatal编程技术网

使用连接和分组方式的MySQL查询

使用连接和分组方式的MySQL查询,mysql,join,group-by,Mysql,Join,Group By,我正在构建一个MySQL查询,但似乎无法正确地进行 我有四张桌子: -客户 -订单 -销售价格 -购买价格 客户和订单之间存在1:n关系“customernr”。 订单和销售价格之间存在1:n关系“ordernr”。 订单和采购价格之间存在1:n关系“ordernr” 我想做的是生成所有客户的输出,以及他们的总购买和销售金额 到目前为止,我有以下疑问 SELECT c.customernr, c.customer_name, SUM(sr.sales_price) AS sales_price,

我正在构建一个MySQL查询,但似乎无法正确地进行

我有四张桌子:
-客户
-订单
-销售价格
-购买价格

客户和订单之间存在1:n关系“customernr”。
订单和销售价格之间存在1:n关系“ordernr”。 订单和采购价格之间存在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
销售价格和购买价格的结果太高了。我似乎在重复计算。我做错了什么?是否可以在单个查询中执行此操作


谢谢你的回复

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

问题似乎是,当您将orders表与包含销售率和购买率的表联接时,您将得到后两个表的笛卡尔积。即,这两个表中的每一行对另一个表中的每个对应行重复一次。以下查询应通过将每个订单的费率相加,然后再将销售费率和采购费率加入其他表来解决此问题:

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;

GROUP BY k.bedrijfsnaam
-表“k”在哪里声明?对不起,我忘了将GROUP BY语句从荷兰语翻译成英语。塔克斯。