数据库有个访问时间字段avg_time
,类型为 Time
,根据需求计算某段时间内的平均访问时间,计算公式为:平均访问时间 = 访问总时间/访问次数
假设数据表tj_log
中有如下数据:
avg_time | uc_count | tj_time |
---|---|---|
00:07:09 | 5 | 2018-01-03 08:00:09 |
00:05:14 | 2 | 2018-01-03 09:02:03 |
00:02:03 | 1 | 2018-01-03 18:03:29 |
查询语句如下
select sum(avg_time) avgTime, sum(uc_count) ucCount, date_formart(tj_time,"%y-%m-%d %H") tjTime from tj_log where tj_time> "2018-01-01" and tj_time="2018-01-02" group by tiTime;
预期我以为sum(avg_time)会计算时间的毫秒数之和,但是事实上它最终的结果却是:1426,与预期结果相差甚远。
于是我直接计算一条数据看看是什么结果:
select sum(avg_time) avgTime, sum(uc_count) ucCount, date_formart(tj_time,"%y-%m-%d %H") tjTime from tj_log where tj_time = "2018-01-03 08:00:09" group by tiTime;
发现 avgTime = 709,在看看表中的数据,原来sum(avg_time)只是简单的把字符串去掉特殊字符后的结果相加而已。
avg_time | uc_count | tj_time |
---|---|---|
00:07:09 | 5 | 2018-01-03 08:00:09 |
1426 = 709+514+203
所以,如果有时间统计的需求,最好把字段设计成long类型的,在程序中去转换一下就好了。