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;