SQL数据范围最小最大类别

时间:2012-05-03 00:59:10

标签: sql range max break min

我想确定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

我该怎么做?我需要第3列吗?我知道如果我有新的类别的第3列分别说C D E,我可以按那些分组并获得结果。但我不知道该怎么做。

请帮帮我。

由于 -Adeel

2 个答案:

答案 0 :(得分:1)

假设您试图将类别分成由连续整数组成的组,那么以下内容将起作用:

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函数,因此在大多数数据库中都可用。

答案 1 :(得分:0)

听起来recursive CTE应该适合你,但这取决于你的RDBMS如何工作(如果它甚至支持)但是,你可以做一些增量计数,可以是用作每个部分的乘数直到最大限度。如果您让我们知道RDBMS,我可以提供一个示例。