SQL:计算值落入的间隔

时间:2018-10-10 13:55:30

标签: sql sybase

我有一列这样的内容:

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)。

提前谢谢大家!

4 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

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

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

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

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

答案 1 :(得分:1)

假设您想将值分组在0-5(特殊情况),6-1011-15等中,只需使用以下查询(为SQL Server编写但说明了此想法) :

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替换为适当的字符串连接运算符或函数。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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