SQL数据范围最小值最大值类别(SQL Data Range Min Max category)

2019-09-17 00:20发布

我想确定的2个类别的范围。 A类和B类A开始从1至15,B开始从16到31然后再次开始从32到40,现在如果运行此查询

select min(range), max(range) 
from table
group by category
order by category

它给了我范围A类从1到40和B类为16〜31。我想打破Range和希望看到的结果

Category A 1 to 15
Category B 16 to 31
Category A 32 to 40

我怎么做? 我需要一个第三列? 我知道,如果我有新的类别第三列分别让CDE说,我可以通过这些组和得到的结果。 但我不知道该怎么做。

请帮助我。

由于-Adeel

Answer 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函数,所以它是在大多数数据库可用。



Answer 2:

这听起来像一个递归CTE应该为你工作,但它取决于你的RDBMS如何这可能是工作(如果它甚至支持),但你很可能做一些增量计数的,可以用作每个事半功倍拼凑起来,直到最大限制。 如果你让我们知道了RDBMS我可以提供一个例子。



文章来源: SQL Data Range Min Max category