PostgreSQL 使数据以 5 为步长进入区间
PostgreSQL make data fall into intervals with a step of 5
我有一个从1到N的数据,我需要做的是让它以5为步长落入区间。例如,从 1 到 5 的每个项目都进入间隔 1,从 6 到 10 进入间隔 2 等等,直到结束。
我做这个是为了找到间隔,但每个新数字似乎都有自己的间隔。谁能帮忙?
select distinct Meters, (Meters/5)*5 || '-' || (Meters/5)*5+5 as Meters_range
from v_temp_schema.tmp_split_data
order by 1
输出:
Meters Interval
1 1-6
2 2-7
3 3-8
4 4-9
9 9-14
6 6-11
11 11-16
8 8-13
34 34-39
.........
78 78-83
15 15-20
81 81-86
我需要的输出:
Meters Interval
1 1-5
2 1-5
3 1-5
4 1-5
9 6-10
6 6-10
11 11-15
8 6-10
34 31-35
.........
78 76-80
15 11-15
81 81-85
您的 meters
列有可能不是整数,这就是整数除法不起作用的原因,您必须确保它是一个整数...此查询为我返回了正确的结果(我刚刚生成了一系列整数来模拟 meters
值,请确保在公式或子查询
中 meters
旁边有 ::int
部分
select
meters
,(meters/5)*5+1 || '-' || (meters/5)*5+5 as interval
from (
select generate_series (1,100,1)::int as meters
) m
从您共享的输出来看,meters / 5
除法似乎是作为浮点除法完成的,因此除以然后乘以 5 只是 returns 相同的值。您可以 floor
结果使其表现得像整数除法:
SELECT DISTINCT meters, FLOOR(meters/5) * 5 || '-' || FLOOR(meters/5) * 5 + 5 AS Meters_range
-- Here ------------------^-----------------------------^
FROM v_temp_schema.tmp_split_data
ORDER BY 1
我有一个从1到N的数据,我需要做的是让它以5为步长落入区间。例如,从 1 到 5 的每个项目都进入间隔 1,从 6 到 10 进入间隔 2 等等,直到结束。
我做这个是为了找到间隔,但每个新数字似乎都有自己的间隔。谁能帮忙?
select distinct Meters, (Meters/5)*5 || '-' || (Meters/5)*5+5 as Meters_range
from v_temp_schema.tmp_split_data
order by 1
输出:
Meters Interval
1 1-6
2 2-7
3 3-8
4 4-9
9 9-14
6 6-11
11 11-16
8 8-13
34 34-39
.........
78 78-83
15 15-20
81 81-86
我需要的输出:
Meters Interval
1 1-5
2 1-5
3 1-5
4 1-5
9 6-10
6 6-10
11 11-15
8 6-10
34 31-35
.........
78 76-80
15 11-15
81 81-85
您的 meters
列有可能不是整数,这就是整数除法不起作用的原因,您必须确保它是一个整数...此查询为我返回了正确的结果(我刚刚生成了一系列整数来模拟 meters
值,请确保在公式或子查询
meters
旁边有 ::int
部分
select
meters
,(meters/5)*5+1 || '-' || (meters/5)*5+5 as interval
from (
select generate_series (1,100,1)::int as meters
) m
从您共享的输出来看,meters / 5
除法似乎是作为浮点除法完成的,因此除以然后乘以 5 只是 returns 相同的值。您可以 floor
结果使其表现得像整数除法:
SELECT DISTINCT meters, FLOOR(meters/5) * 5 || '-' || FLOOR(meters/5) * 5 + 5 AS Meters_range
-- Here ------------------^-----------------------------^
FROM v_temp_schema.tmp_split_data
ORDER BY 1