我正在阅读ms sql的RANKING函数。我了解NTILE()以外的其他功能。
可以说如果我有此数据:
StudentID MARKS
S1 75
S2 83
S3 91
S4 83
S5 93
因此,如果我执行
NTILE(2) OVER(ORDER BY MARKS desc)
,结果将是什么,为什么?如果是
NTILE(3)
怎么办?简单的解释有人吗?
最佳答案
可以将其视为存储桶,NTILE(2)将创建2个存储桶,一半的行将具有值1,另一半的值将成为2
例
create table #temp(StudentID char(2), Marks int)
insert #temp values('S1',75 )
insert #temp values('S2',83)
insert #temp values('S3',91)
insert #temp values('S4',83)
insert #temp values('S5',93 )
select NTILE(2) over(order by Marks),*
from #temp
order by Marks
这是输出,因为行数不均匀,因此存储区1将多出1行
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S5 93
如果再增加一行
insert #temp values('S6',92 )
现在两个水桶都有三排
1 S1 75
1 S2 83
1 S4 83
2 S3 91
2 S6 92
2 S5 93
实际上,我从未在生产代码中使用过NTILE,但可以在需要将结果分成n个存储桶的地方使用
关于sql - 想更多地了解NTILE(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14355324/