我有一列这样的内容:
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)。
提前谢谢大家!
答案 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-10
,11-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 ...
使用整数除法运算符替换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)