平均值mysql的时差

rup*_*upa 13 mysql

是否有一个函数可以在我的sql中找到标准时间格式的平均时差.

Eri*_*ric 20

你可以timestampdiff用来找到两次之间的差异.

不过,我不确定你的"平均"是什么意思.整个桌子的平均值?连续平均?

如果是表格或行的子集:

select
    avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
    table
Run Code Online (Sandbox Code Playgroud)

avg函数与任何其他聚合函数一样,并将响应group by.例如:

select
    col1,
    avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
    table
group by col1
Run Code Online (Sandbox Code Playgroud)

这将为您提供每个不同值的平均差异col1.

希望这能让你指向正确的方向!


And*_*rew 9

我喜欢做的是

SELECT count(*), AVG(TIME_TO_SEC(TIMEDIFF(end,start)))
FROM
  table
Run Code Online (Sandbox Code Playgroud)

给出行数......

  • @George 不,这不像你说的那样工作。我得到了一些奇怪的值 (2认同)

小智 5

为了从mysql获得标准时间格式的实际平均值,我必须转换为秒,平均值,然后转换回:

SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(timeA, timeB))))
Run Code Online (Sandbox Code Playgroud)

如果你没有转换为秒,你得到一个奇数十进制表示的分钟,这对我来说没有任何意义(对我而言).


Hol*_*ger 5

我很好奇它是否AVG()准确,COUNT()实际上只是近似该值的方式(“这个值是一个近似值”)。毕竟,让我们回顾一下平均公式:average = sum / count。因此,知道计数是否准确对于这个公式来说实际上非常重要!

在测试了多种组合之后,它看起来绝对AVG()有效,并且是一个很好的方法。您可以自己计算一下,看看它是否适用于...

SELECT
    COUNT(id) AS count,
    AVG(TIMESTAMPDIFF(SECOND, OrigDateTime, LastDateTime)) AS avg_average,
    SUM(TIMESTAMPDIFF(SECOND, OrigDateTime, LastDateTime)) / (select COUNT(id) FROM yourTable) as calculated_average,
    AVG(TIME_TO_SEC(TIMEDIFF(LastDateTime,OrigDateTime))) as timediff_average,
    SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(LastDateTime, OrigDateTime)))) as date_display
FROM yourTable
Run Code Online (Sandbox Code Playgroud)

结果示例:

             count: 441000
       avg_average: 5045436.4376
calculated_average: 5045436.4376
  timediff_average: 5045436.4376
      date_display: 1401:30:36
Run Code Online (Sandbox Code Playgroud)

看来还蛮准确的!

这将返回:

  • count: 计​​数。
  • avg_average:基于 的平均值AVG()。(感谢 Eric 对此的回答!)
  • calculated_average:基于 的平均值SUM()/COUNT()
  • timediff_avg:基于 的平均值TIMEDIFF()。(感谢安德鲁对此的回答!)
  • date_display:格式精美的显示版本。(感谢CS对此的回答!)