Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算Postgresql的平均时间_Sql_Postgresql_Average - Fatal编程技术网

如何计算Postgresql的平均时间

如何计算Postgresql的平均时间,sql,postgresql,average,Sql,Postgresql,Average,我正在尝试执行一个查询,该查询将为我提供一次比赛的平均时间,因为我知道我的表的结构如下 RunnerID, State, Timestamp_race R1 start 2017-04-11 12:15:15.722415 R2 start 2017-04-11 13:15:15.722415 R1 finish 2017-04-11 15:15:15.722415 R1 finish 2

我正在尝试执行一个查询,该查询将为我提供一次比赛的平均时间,因为我知道我的表的结构如下

RunnerID,   State,   Timestamp_race
R1          start     2017-04-11 12:15:15.722415
R2          start     2017-04-11 13:15:15.722415
R1          finish    2017-04-11 15:15:15.722415
R1          finish    2017-04-11 17:15:15.722415
跑步者在不同的时间开始,在不同的时间结束。这个想法是计算整个比赛的平均时间

您可以使用
提取(历元)
获得每场比赛的秒数,然后取平均值:

select avg(seconds) as avg_seconds
from (select runnerid, extract(epoch from max(Timestamp_race) - min(Timestamp_race)) as seconds
      from t
      group by runnerid
     ) r;
这假定最短时间是开始,最长时间是结束

编辑:

如果希望将平均值作为间隔,可以执行以下操作:

select avg(diff) as avg_diff
from (select runnerid, (max(Timestamp_race) - min(Timestamp_race)) as diff
      from t
      group by runnerid
     ) r;
这里有一个更好的格式:

select to_char(avg(seconds),'DD HH24:MI:SS.MS') as avg_time
from (select runnerid, max(Timestamp_race) - min(Timestamp_race) as seconds
      from race t
      group by runnerid
     ) r;

|        avg_time |
|-----------------|
| 00 03:30:00.000 |

请向我们展示您已经尝试过的内容,以便我们可以指导您正确的方向。看起来R1完成了两次,R2从未完成。无需从时间戳的差异中提取历元。PostgreSQL在减去时间戳时自然返回一个间隔数据类型。默认格式有点冗长,但带有适当掩码的
TO_CHAR
函数(例如
'DD HH24:MI:SS.MS'
将有助于此。@Sentinel。我认为秒是一种很好的格式,但你有一个很好的观点。