如何在 mysql 中添加两毫秒列

how to add two millisecond column in mysql

我有table如下图

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 结果按代码分组; // 结果为整数值

and SELECT timestamp(sum(time)) FROM results group by code; // 结果为空

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

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

您的 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

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

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