我有如下表所示的表格
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结果按代码分组; //结果为空
答案 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}}