如何使用 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
中测试
它仍然不完美,但想法是这样的:
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
我想在 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
中测试
它仍然不完美,但想法是这样的:
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