MySQL 对平均值和日期时间的计算不准确

MySQL innacurate calculation with average and datetime

我在计算时间平均值时遇到问题。我有一个有很多记录的table,table结构是用户id,工作的开始和结束时间(如果你想要,你可以download the table script here),我需要得到每个用户的平均有效工作时间,所以我是这样计算平均值的:

select iduser, sec_to_time(avg(timestampdiff(second, begin, end))) 
from test 
group by iduser;

到目前为止一切顺利,returns:

USER1 00:25:55.9327
USER2 05:47:44.8713
USER3 03:13:43.4724

但是,问题是当我尝试计算所有用户的平均值(不分组)时:

select sec_to_time(avg(timestampdiff(second,begin, end))),avg(timestampdiff(second,begin, end))
from test;

它 returns '03:26:18.9014',但根据我的计算,它应该 return 03:09:07.333。我检查了常数值和 excel test

select sec_to_time((time_to_sec("00:25:55.9327")+time_to_sec("05:47:44.8713")+time_to_sec("3:13:43.4724"))/3);

到目前为止我不明白为什么它是 return'03:26:18.9014',根据其他计算,它是不准确的。有人知道为什么会这样吗?

如果你运行这个查询

select  count(iduser) as cnt,
    sum(timestampdiff(SECOND, `begin`, `end`)) as tot,
    avg(timestampdiff(SECOND, `begin`, `end`)) as aver,
    sec_to_time(avg(timestampdiff(SECOND, `begin`, `end`))) as tim
from test ;

结果

cnt     tot         aver        tim
2903    35935951    12378.9015  03:26:18.9014

你得到了所有的部分,这样你就可以自己计算,结果看起来是正确的

我明白了,这是统计数学基础,如果组中的记录数不同,我无法得到相同的结果,每个用户必须有相同的记录数