如何使用 postgres 限制 SUM

How to limit a SUM using postgres

我想在 postgres 中将 SUM 限制为 2 小时 sql。我不想限制求和的结果,而是要求和的值。

例如下面的table:

在这种情况下,如果我 SUM('02:20', '01:50', '00:30', '03:00') 结果将是 07:30.

|CODE |  HOUR |
| --- | ----  |
| 1   | 02:20 |
| 2   | 01:50 |
| 3   | 00:30 |
| 4   | 03:00 |

但我想要的是将 HOUR 列限制为 02:00。所以如果值>02:00,它会被替换成02:00,只有在SUM.

因此 SUM 应如下所示 ('02:00', '01:50', '00:30', '02:00'),结果为 06:20

使用case作为函数的参数:

select sum(case when hour < '2:00' then hour else '2:00' end)
from my_table

Db<>fiddle.

中测试

它仍然不完美,但想法是这样的:

    select sum(x.anything::time)
    from (select id, 
                 time,
                 case when time <= '02:00' then time::text 
                 else '02:' || (EXTRACT(MINUTES FROM time::time)::text) 
                 end as anything
         from time_table) x