【问题标题】:Oracle, Mysql, how to get averageOracle,Mysql,如何取平均值
【发布时间】:2015-10-22 06:04:54
【问题描述】:

如何仅使用 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

我们可以稍后在javaphp 中执行此操作,但希望立即从查询中获取结果。我们应该如何修改上面的查询来做到这一点?

fuelCapacity 是在加油站倒入油箱的燃油升数。

【问题讨论】:

  • 第 2 列和第 3 列是什么意思(数字、里程表?)
  • 请将字段名翻译成英文。
  • 你有fuelCapacityodometer,你想要平均消费。如何?您没有提供有关如何计算它的信息。如果我知道汽车的燃油容量和里程表读数,我就无法计算平均油耗。
  • 正如 Antti29 所说,您的列名没有意义,根据给定的信息很难为您提供帮助。弄清楚数据集后,就可以进行计算列,例如:SELECT fuelused/dist AS consumption FROM yourtable
  • fuelCapacity 是您当天油箱的数量并且您总是将油箱加满?那么在 2015 年 9 月 29 日,您行驶了 1284172-1276284=7888 的距离并在该距离上使用了 534 燃料?所以你平均每个距离单位使用 0.07 个燃料单位?

标签: sql oracle average


【解决方案1】:

对于一个总平均值,您需要的是补充燃料的总和除以开始和结束时里程表读数之间的差值,即fuel used / distance travelled

我手头没有您的表结构,但是对 select 语句的这种更改应该可以解决问题:

select cast(sum(zkd.fuelCapacity) as float) / (max(zkd.odometer) - min(zkd.odometer)) as consumption ...

cast(field AS float) 顾名思义,将字段类型转换为浮点数,因此结果也是浮点数。 (我确实怀疑您的 fuelCapacity 字段是一个浮点数,因为您的示例中有一个浮点值,但这可以确保。)

【讨论】:

  • 当我提出问题时,这就是我想到的答案。我只是对示例中的结果 0.07 感到困惑; 0.07 l/km 和 0.07 l/m = 70 l/km 似乎都没有多大意义。不过,我可能是错的。只有当水箱完全装满时,它才真正起作用。无论如何,没有必要在任何一个 DBMS 中强制浮动。而且你必须从 sum(fuelCapacity) 中减去第一个 fuelCapacity,这在 Oracle 中非常简单,而在 MySQL 中则不那么容易。
  • @Antti29 您的查询比我们的更快 :) 感谢和抱歉我的英语不好
猜你喜欢
  • 2015-02-19
  • 2022-01-17
  • 1970-01-01
  • 2022-01-08
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
相关资源
最近更新 更多