【问题标题】:how to add two millisecond column in mysql如何在mysql中添加两毫秒的列
【发布时间】:2015-03-03 19:52:14
【问题描述】:

我有如下所示的表格

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 次则除以 3,这应该是动态的。

我想要的结果应该是

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

我尝试使用此查询

SELECT sum(time) FROM results group by code; // 结果是整数值

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

【问题讨论】:

  • 欢迎来到 Stack Overflow。您能补充一下到目前为止您尝试过的内容吗?
  • 您的time 列是什么列类型?
  • 是的,时间列类型是varchar

标签: mysql sql select


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢您的回答。 gid 代码 TIME(AVG(time)) 1 123 00:00:10 1 145 00:00:11 仍然没有显示毫秒。我也想显示毫秒
    • @KaifKhan 我编辑了我的答案以调用time_format 并显示微秒。
    • 感谢您的重播。 @Gerald Schneider 给出的查询与我的结果完美匹配。再次感谢@Mureinik 先生
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2018-03-10
    • 2020-03-01
    • 1970-01-01
    • 2013-01-27
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多