SQL:计算一个值落入的区间

SQL: Calculate the interval a value falls into

我有这样一个专栏:

column1   
      4
     12
     23
      6
     14
     35

我想在它旁边创建另一列,显示 column1 中的值落入的范围,如下所示:

column1        column2  
      4            0-5
     23          21-25 
      6           6-10
     14          11-15
     33          31-35 

这似乎是一项简单的排名任务,但我无法让它发挥作用。我是 SQL 的新手,可能缺少一些基本的东西。所以也许只是为我指明一个方向,让我从现在的位置出发,因为我迷路了。

到目前为止,我已经研究过使用 CASE(没有成功)和 RANK()。后者对我根本不起作用,因为它甚至没有作为关键字突出显示(我使用的是 Sybase Interactive SQL v12.0.1)。尽管在我看来 RANK() 即使有效也不是可行的方法,因为我需要我的值在精确范围内排名(第 5 步为 0 到 35)。

提前谢谢大家!

你可以这样做:

select col1,
       concat( floor(col1 / 5) * 5, '-', 5 + floor(col1 / 5) * 5)

您也可以使用'||'运算符:

select col1,
       floor(col1 / 5) * 5 || '-' || (5 + floor(col1 / 5) * 5))

或者您的数据库用于字符串连接的任何方法。

假设您想要对 0-5(特殊情况)、6-1011-15 等内部的值进行分组,只需使用以下查询(为 SQL 编写服务器但说明了这个想法):

SELECT num, CONCAT(
    CASE WHEN num <= 5 THEN 0 ELSE FLOOR((num - 1) / 5) * 5 + 1 END,
    '-',
    CASE WHEN num <= 5 THEN 5 ELSE FLOOR((num - 1) / 5) * 5 + 5 END
)
FROM ...

Tests on DB Fiddle

如果可用,请将 FLOOR(x / y) 替换为整数除法运算符。
CONCAT 替换为适当的字符串连接运算符或函数。

concat(column1-(column1%5), "-", column1-(column1%5)+5)

select col1, concat( floor(col1 / 5) * 5, '-', 5 + floor(col1 / 5) * 5)