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-10
、11-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 ...
如果可用,请将 FLOOR(x / y)
替换为整数除法运算符。
将 CONCAT
替换为适当的字符串连接运算符或函数。
或
concat(column1-(column1%5), "-", column1-(column1%5)+5)
select col1,
concat( floor(col1 / 5) * 5, '-', 5 + floor(col1 / 5) * 5)
我有这样一个专栏:
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-10
、11-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 ...
如果可用,请将 FLOOR(x / y)
替换为整数除法运算符。
将 CONCAT
替换为适当的字符串连接运算符或函数。
或
concat(column1-(column1%5), "-", column1-(column1%5)+5)
select col1, concat( floor(col1 / 5) * 5, '-', 5 + floor(col1 / 5) * 5)