我在计算时间平均时遇到问题。我有一个包含很多记录的表,该表的结构是用户ID,工作的开始和结束时间(如果需要,您可以download the table script here),并且我需要获取每个用户的平均有效工作时间,所以我平均来说是这样的:
select iduser, sec_to_time(avg(timestampdiff(second, begin, end)))
from test
group by iduser;
到目前为止,它返回:
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;
它返回'03:26:18.9014',但是根据我的计算,它应该返回03:09:07.333。我用常数值和excel测试进行了检查
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);
到目前为止,我不明白为什么它返回'03:26:18.9014',根据其他计算,它是不正确的。有人知道为什么会这样吗?
答案 0 :(得分:0)
如果您运行此查询
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
获得所有零件,以便您可以进行自己的计算,而且看起来正确
答案 1 :(得分:0)
我发现这是统计数学基础,如果组中记录数不同,我将无法获得相同的结果,每个用户必须拥有相同数量的记录