我正在阅读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/

10-12 19:07