如何在mysql中添加两毫秒列

时间:2015-01-06 07:04:29

标签: mysql sql select

我有如下表所示的表格

gid code time  qid
 1 123  08:108 15
 1 145  11:012 15
 1 145  11:216 16
 1 123  12:102 16

现在你想把这个' gid'并使用相同的代码列添加两次(例如:我正在考虑123,计算时间(08:108 + 12:102)/ 2。除以' 2'因为代码123出现两次,如果它出现三次然后除以3,这应该是动态的。

我希望结果应该是

gid code time   
1   123  10:105 
1   145  11:114  

我尝试使用此查询

SELECT sum(time)FROM results FROM code; //导致整数值

和SELECT时间戳(sum(time))FROM结果按代码分组; //结果为空

2 个答案:

答案 0 :(得分:0)

您可以在avg列上使用time汇总功能 - 您只需在完成后将其转换回time,然后使用time_format如果默认格式不适合您:

SELECT   gid, code, TIME_FORMAT(TIME(AVG(`time`)), '%H-%i.%f')
FROM     mytable
GROUP BY gid, code

答案 1 :(得分:0)

您的time字段看起来不像TIME类型。 TIME字段的格式为HH:MM:SS,并且不允许存储毫秒。 MySQL Documentation states that trailing fractions of seconds are allowed in date and time values, but are discarded and not stored

您的time字段看起来像是varchar,虽然您可以使用SUM()AVG()等函数,但您的符号seconds:milliseconds是错误的。

您可以使用以下查询:

SELECT code,AVG(REPLACE(time,':','.')) FROM results group by code

这会将:中的.替换为AVG(),从而创建一个可以正确处理的浮点数code AVG(REPLACE(time,':','.')) 123 10.105 145 11.114

结果:

FLOAT

当然这会在SQL服务器上创建更多操作。最好的方法是将列定义更改为code time 123 8.108 145 11.012 145 11.216 123 12.102 并将秒和毫秒存储为浮点数:

SELECT code,AVG(time) FROM results GROUP BY code

code AVG(time) 123 10.1050000190735 145 11.1139998435974 的结果:

{{1}}