首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL使数据间隔为5步

PostgreSQL使数据间隔为5步
EN

Stack Overflow用户
提问于 2019-06-27 08:15:19
回答 2查看 259关注 0票数 1

我有一个从1到N的数据,我需要做的是让它间隔五步。例如,从1到5的每一项到间隔1,从6到10到间隔2,等等直到结束。

我做这个是为了找到间隔,但是每一个新的数字似乎都有它自己的间隔。有人能帮忙吗?

代码语言:javascript
复制
select distinct Meters, (Meters/5)*5 || '-' || (Meters/5)*5+5 as Meters_range
from v_temp_schema.tmp_split_data
order by 1

产出:

代码语言:javascript
复制
     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

我需要的输出:

代码语言:javascript
复制
     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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-27 08:46:12

从您共享的输出来看,meters / 5除法似乎是作为浮点除法完成的,因此除法然后乘以5只会返回相同的值。您可以对结果进行floor,使其充当整数除法:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-06-27 08:35:27

您的meters列可能不是整数,这就是整数除法不起作用的原因,您必须确保它是整数.这个查询为我返回了一个正确的结果(我刚刚生成了一系列的整数来模拟meters值,确保您的公式或子查询中的meters旁边有::int部件)。

代码语言:javascript
复制
select
 meters
,(meters/5)*5+1 || '-' || (meters/5)*5+5 as interval
from (
    select generate_series (1,100,1)::int as meters
) m
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56786770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档