Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 - Fatal编程技术网

Mysql 联接中表中的列之和

Mysql 联接中表中的列之和,mysql,Mysql,我有三张桌子,订单,订单,产品和订单。目前,我有一个查询,可以得到每个月的产品总数,但现在我们还想添加另一个表中的运费 我尝试了以下返回正确的总值的方法,但是总装运量是它的5倍。我认为这是由于订单,可以有多个产品,但我不知道还能做什么 SELECT Count(DISTINCT O.orders_id) AS Orders, Sum(OP.final_price * OP.products_quantity) AS total_value,

我有三张桌子,订单,订单,产品和订单。目前,我有一个查询,可以得到每个月的产品总数,但现在我们还想添加另一个表中的运费

我尝试了以下返回正确的总值的方法,但是总装运量是它的5倍。我认为这是由于订单,可以有多个产品,但我不知道还能做什么

  SELECT Count(DISTINCT O.orders_id)                AS Orders, 
       Sum(OP.final_price * OP.products_quantity) AS total_value, 
       Date_format(O.last_modified, '%m-%Y')      AS date_interval, 
       Sum(OT.value)                              AS total_shipping 
FROM   
       orders AS O 
LEFT JOIN 
        orders_total AS OT 
ON ( OT.orders_id = O.orders_id 
AND OT.class = 'ot_shipping' ), 
       orders_products AS OP 
WHERE  
       ( O.orders_id = OP.orders_id ) 
       AND ( O.orders_status = 3 ) 
GROUP  BY date_interval 
ORDER  BY O.last_modified DESC 
返回值为:

+----+------------+---------------+----------------+
| ID | total_value| date_interval | total_shipping |
+----+------------+---------------+----------------+
| 17 | 55912.2160 |    01-2014    |      24954     |
预期:

+----+------------+---------------+----------------+
| ID | total_value| date_interval | total_shipping |
+----+------------+---------------+----------------+
| 17 | 55912.2160 |    01-2014    |       4938     |
这是小提琴


它包含一个订单,其中包含3种产品。预期的总_值为500,预期的总_发货量也为500,但返回1500(3 x产品)。遗憾的是,由于SqlFIDLE的最大8000个字符限制,我不得不从表中删除很多字段。

尝试将装运值放入内联视图:

select count(*) as Orders,
sum(ord.order_total_value) as total_value,
ord.date_interval as date_interval,
sum(ship.order_shipping_value) as total_shipping
from
(
SELECT O.orders_id,
       O.last_modified AS modified_date,
       Sum(OP.final_price * OP.products_quantity) as order_total_value, 
       Date_format(O.last_modified, '%m-%Y') as date_interval
FROM  orders AS O
      INNER JOIN orders_products AS OP on O.orders_id = OP.orders_id
WHERE O.orders_status = 3  
GROUP  BY date_interval,O.orders_id
) ord LEFT OUTER JOIN 
(
 SELECT orders_id,sum(value) as order_shipping_value
 FROM orders_total
 WHERE class='ot_shipping'
 GROUP BY orders_id
) ship ON ord.orders_id = ship.orders_id
GROUP BY ord.date_interval
ORDER BY modified_date DESC;

如果可以,请显示表格。@SajadLfc我将尝试找出如何生成表格的某些文本视图,但是,它们都有orders\u id,这应该可以建立它们之间的关系orders\u total???@CasperO的值中有什么确切的值如果可以的话,您可以使用它发布查询和表schema@SurajSingh我添加了SQLFIDLE链接,希望这是正确的URL我在我的问题中添加了一个sqlfiddle,从订单中选择我添加的总计,其中class='ot'u shipping'仅获取运输成本它似乎有效。哇。错过了。为了完整性起见,将其添加到答案中。它似乎有效,刚刚使用live数据库进行了测试,但是order by现在已由lostI编辑了部分代码,并在sqlfiddle中使用更多的order进行了测试: