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

mysql的计算结果是一样的

mysql的计算结果是一样的,mysql,database,Mysql,Database,我有以下疑问: select v.vehicle_id, v.year, v.make, v.model, v.mileage, count(distinct o.order_id) as order_number, sum(s.labor_hour*labor_cost_per_hour+part_cost) * count(distinct vo.order_id) as vehi

我有以下疑问:

select v.vehicle_id, 
       v.year, 
       v.make, 
       v.model, 
       v.mileage, 
       count(distinct o.order_id) as order_number, 
       sum(s.labor_hour*labor_cost_per_hour+part_cost) * 
       count(distinct vo.order_id) as vehicle_cost

   from tbl_vehicle_order vo
  inner join tbl_vehicle v 
    on vo.vehicle_id = v.vehicle_id
  inner join tbl_order o
    on vo.order_id = o.order_id
  natural join tbl_customer c
  natural join tbl_service s
  natural join tbl_rate r
where 
      s.rate_id = r.rate_id 
  and vo.order_id = o.order_id 
  and vo.vehicle_id=v.vehicle_id
group by v.vehicle_id;
结果如下=>

更新: 在我编辑代码之后,结果似乎没有太大变化。 以下是更新的代码:

 select v.vehicle_id, v.year, v.make, v.model, v.mileage, count(vo.order_id) as order_number, sum(s.labor_hour*r.labor_cost_per_hour+s.part_cost) as vehicle_cost
 from tbl_vehicle_order vo, tbl_vehicle v,tbl_order o,tbl_customer c,tbl_service s,tbl_rate r, tbl_order_service os
 where vo.order_id = o.order_id and vo.vehicle_id = v.vehicle_id and os.service_id = s.service_id and s.rate_id = r.rate_id
 group by v.vehicle_id
 order by 1;
更新结果:


我认为我的计算部分有一些错误。有人想指出我的错误吗?谢谢

你可以试试这个。它假定您在其他文档中描述的模式


count(distinct)
给出提示。您有重复的行,因为您同时连接两个不同的维度,并为每个车辆获得笛卡尔积。您需要在子查询中进行聚合。确实要自然联接吗?有WHERE子句似乎是多余的。虽然冗余逻辑不会导致问题,但是否有其他列(如id)可以用作联接列?@AgRizzo如果我不使用自然联接,如何获取s.rate_id和s.labour_hour?我真的不知道如何在子查询中执行聚合函数Regarding Natural Joins:只需使用内部连接(就像您对vehicle和order表所做的那样),并明确说明表之间的关系(如WHERE子句中所示)@AgRizzo但对于表“c”和“s”,它们没有相同的属性。我们如何使用内部联接?联接是否与自然联接做相同的事情,但它可以给出ON条件?自然联接是一种内部联接,由服务器确定在ON子句中使用哪些列(它选择两个表有共同点的列名){并且联接与内部联接相同}如果我只想找到车辆成本的最高值怎么办?我应该添加一个WHERE部分并显式显示ALL关键字?将MAX(order\u summation.order\u cost)添加到外部查询的SELECT将提供该车辆最昂贵的订单成本(而不是订单中最昂贵的服务成本),在我添加MAX函数后,它仍然显示ever summation;但我只想要最高的总和。我该怎么办?
SELECT v.vehicle_id, 
       v.year, 
       v.make, 
       v.model, 
       v.mileage, 
       COUNT(DISTINCT vo.order_id) as unique_orders, 
       SUM(order_summation.order_cost) as sum_of_all_orders
FROM tbl_vehicle_order vo
INNER JOIN tbl_vehicle v 
  ON vo.vehicle_id = v.vehicle_id
JOIN (
    SELECT os.order_id as order_id
      , SUM(s.part_cost + s.labor_hour*r.labor_cost_per_hour) AS order_cost
    FROM order_service AS os
    JOIN service AS s
     ON os.service_id = s.service_id
    JOIN tbl_rate AS r
     ON r.rate_id = s.rate_id
    GROUP BY os.order_id) AS order_summation
  ON order_summation.order_id = vo.order_id
GROUP BY v.vehicle_id, 
         v.year, 
         v.make, 
         v.model, 
         v.mileage;