如何简化这个PostgreSQL查询来计算平均值?

bkkx9g8r  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(164)

我有一个记录跑步记录的表,它有以下几列:
| ID|距离|运行时间|运行日期|
| --|--|--|--|
| 1 | 10 |时间01:35:00| 2023-12-04 2023-12-04 2023-12-04|
| 2 | 10 |时间01:41:00| 2023-12-05 - 2023 -05|
我想计算某个日期范围内的每英里平均配速(格式为mm:ss)。例如,日期范围为12/04-12/05,每英里配速为09:48。第一步是计算出总英里数和分钟数。然后将分钟数除以总英里数。最后一步是将分钟数转换为mm:ss格式。
以下是我到目前为止所能想到的:

with average as (
select
    runTime.totalTime / distance.totalDistance as averagePace
from
    ((
    select
        sum(distance) as totalDistance
    from
        runs
    where
        run_date >= '2023-12-04'
        and run_date <= '2023-12-05') ) as distance,
    (
    select
        extract / 60 as totalTime
    from
        (
        select
            extract(EPOCH
        from
            sum )
        from
            (
            select
                sum(run_time)
            from
                runs
            where
                run_date >= '2023-12-04'
                and run_date <= '2023-12-05'))) as runTime) 
select
    TO_CHAR((averagePace || ' minute')::interval,
    'MI:SS')
from
    average

字符串
查询计算正确的速度,但我觉得它不需要这么长。有没有一个更干净,更有效的方法来计算每英里的平均速度?

dojqjjoe

dojqjjoe1#

如果你的run_time存储为interval数据类型,那么这将工作:

select to_char(sum(run_time) / sum(distance), 'mi:ss')
  from runs
 where run_date between '2023-12-04' and '2023-12-05';

字符串
请参见this fiddle.

相关问题