【问题标题】:SQL Data Range Min Max categorySQL 数据范围最小值最大值类别
【发布时间】:2012-05-12 12:28:11
【问题描述】:

我想确定 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 列,可以分别说 C D E,我可以按这些进行分组并获得结果。但我不知道该怎么做。

请帮帮我。

谢谢 -阿德尔

【问题讨论】:

  • 您使用什么标准来确定合适的范围?特别是,范围是否一定是整数序列?也就是说,如果第一个范围缺少“8”,是一个范围还是两个?

标签: sql range max break min


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

【讨论】:

  • 嗨,戈登。这是一个很好的例子,我现在就试试,让你知道。
  • 戈登,我刚试过你的代码,它就像一个魅力。我很开心。 :D
【解决方案2】:

听起来recursive CTE 应该适合您,但这取决于您的 RDBMS 的工作方式(以及它是否受支持)但是,您可能会做某种增量计数,可以用作每件的乘数直到最大限制。如果您让我们知道 RDBMS,我可以提供一个示例。

【讨论】:

  • 嗨,贾斯汀,CTE 是允许的,我可以处理这些。请给我一个例子。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-03-22
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多