我想确定 2 个类别的范围。 A 类和 B 类。A 从 1 到 15 开始,B 从 16 到 31 开始,然后 A 再次从 32 到 40 开始。
现在如果运行此查询
select min(range), max(range)
from table
group by category
order by category
它给了我 A 类的范围从 1 到 40,B 类的范围从 16 到 31。我想打破范围并想查看结果
Category A 1 to 15
Category B 16 to 31
Category A 32 to 40
我怎么做?我需要第三列吗?我知道如果我有第三列包含新类别,可以分别说 C D E,我可以按这些类别进行分组并获得结果。但我不知道该怎么做。
请帮帮我。
谢谢
-阿迪尔
假设您尝试将类别分成由连续整数组成的组,则以下内容将起作用:
select category, diff, min(range), max(range)
from
(
select category, range,
(range - row_number() over (partition by category order by range)) as diff
from table
) t
group by category
order by 1, 3
此查询基于这样的观察:在给定的类别分组内,数字按顺序增加。因此,减去整数序列将得到一个常量,然后可以使用该常量来识别该特定范围。
Row_Number()
是一个标准的 SQL 函数,因此在大多数数据库中都可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)