根据列的值计算列的范围

时间:2014-12-15 21:41:54

标签: sql

我有一些这样的数据。

 Id  DaysPassed
 1   20
 2   40
 3   8
 4   64

基本上,Dayspassed可以是任何数字。 (也许我可以说它少于某个X数,比如150)。随着新数据的不断涌现,DaysPassed也可能会有所不同。

我的要求是能够为这些数字定义范围。像X行一样,有10-30天的通过范围。

我不确定如何在sql中定义这个范围。我做了一些研究,发现了移动范围。它和我要找的一样吗?如果没有,我该如何计算范围?

我可以做所有天的AVG()然后获得平均值的AVG(),但我不确定这是否正确。

我认为正确的方法是能够解析数据并能够告诉这些行在X范围内。有什么想法吗?

我正在使用sql server 2012。

3 个答案:

答案 0 :(得分:1)

您没有提到您正在使用的数据库引擎。以下查询适用于任何版本的Microsoft SQL Server。如果您不使用SQL Server,那么您应该提到您正在使用的数据库引擎。

Select Count(Case When DaysPassed Between 0 and 9 Then 1 End) As Count_0_to_9,
       Count(Case When DaysPassed Between 10 and 30 Then 1 End) As Count_10_to_30,
       Count(Case When DaysPassed Between 31 and 60 Then 1 End) As Count_31_to_60
From   YourTableNameHere

答案 1 :(得分:0)

如果您尝试在范围内返回结果,请使用带>的WHERE语句,<或类似的。

示例:

SELECT * FROM MY_TABLE WHERE DaysPassed> '20'和DaysPassed< '40';

如果需要动态调整此范围,请根据另一个SELECT语句检查最小值和最大值,将它们存储在变量中,并将它们传递给上面提供的值。

答案 2 :(得分:0)

你可能会发现函数ntile()很有用,如果可以得到更多相等数量项的“范围”。该函数将数据拆分为选定列上的箱(桶,范围,系列......),并为每个元素分配箱号。然后你可以聚合(总和,平均,最小,最大),按箱号分组。

看看:Want to learn more on NTILE()