如何获得仅使用MySQL或Oracle的平均燃料消耗:
SELECT te.fuelName,
zkd.fuelCapacity,
zkd.odometer
FROM ZakupKartyDrogowej zkd
JOIN TypElementu te
ON te.typElementu_Id = zkd.typElementu_Id
AND te.idFirmy = zkd.idFirmy
AND te.typElementu_Id IN (3,4,5)
WHERE zkd.idFirmy = 1054
AND zkd.kartaDrogowa_Id = 42
AND zkd.data BETWEEN to_date('2015-09-01','YYYY-MM-DD')
AND to_date('2015-09-30','YYYY-MM-DD');
查询的结果是:
fuelName | fuelCapacity | odometer | tanking
-------------------------------------------------
'ON' | 534 | 1284172 | 2015-09-29
'ON' | 571 | 1276284 | 2015-09-02
'ON' | 470 | 1277715 | 2015-09-07
'ON' | 580.01 | 1279700 | 2015-09-11
'ON' | 490 | 1281103 | 2015-09-17
'ON' | 520 | 1282690 | 2015-09-23
我们可以稍后在java
或php
中这样做,但希望立即从查询中获得结果。我们应该如何修改上面的查询来做到这一点?
fuelCapacity
是加油站倒入油箱的燃料升数
对于一个总平均值,您需要的是重新填充的总和除以开始和结束时里程表读数之间的差值,即fuel used / distance travelled
。
我手头没有您的表结构,但是对select
语句的修改应该可以达到这个目的:
select cast(sum(zkd.fuelCapacity) as float) / (max(zkd.odometer) - min(zkd.odometer)) as consumption ...
cast(field AS float)
执行其名称所暗示的操作,并将字段类型转换为float,因此结果也将是float。(我怀疑你的fuelCapacity
字段是一个浮点数,因为在你的例子中有一个浮点值,但这将确保。)