我有一些这样的数据。
Id DaysPassed
1 20
2 40
3 8
4 64
基本上,Dayspassed可以是任何数字。 (也许我可以说它少于某个X数,比如150)。随着新数据的不断涌现,DaysPassed也可能会有所不同。
我的要求是能够为这些数字定义范围。像X行一样,有10-30天的通过范围。
我不确定如何在sql中定义这个范围。我做了一些研究,发现了移动范围。它和我要找的一样吗?如果没有,我该如何计算范围?
我可以做所有天的AVG()然后获得平均值的AVG(),但我不确定这是否正确。
我认为正确的方法是能够解析数据并能够告诉这些行在X范围内。有什么想法吗?
我正在使用sql server 2012。
答案 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()很有用,如果可以得到更多相等数量项的“范围”。该函数将数据拆分为选定列上的箱(桶,范围,系列......),并为每个元素分配箱号。然后你可以聚合(总和,平均,最小,最大),按箱号分组。