SQL Server中的Ntile函数,意外输出

时间:2015-04-07 07:12:52

标签: sql-server

我正在使用SQL Server 2012

查询是:

create table #t (id int)

insert into #t values(1), (2), (3), (4), (5)

select id, ntile(2) over (order by id desc) 
from #t

结果:

id  (No column name)  (Expected was)
-------------------------------------
5   1                  1
4   1                  1
3   1                  2
2   2                  2
1   2                  3

我期待SQL Server中的3列结果,为什么它的行为不同?

Ntile(2)每个应该给2个号码?

1 个答案:

答案 0 :(得分:1)

来自NTILE technet文档:

  

对于每一行,NTILE返回行所属的组的编号   所属

NTILE(2)创建两个数据组,因此返回的数字只能在(1,2)中。

您似乎认为NTILE会返回每个组中每行的位置,显然情况并非如此。

如果您使用NTILE(3),则会创建 3 组数据,即

 1. `{5, 4}` -> 1st group, 
 2. `{3, 2}` -> 2nd group and
 3. `{1}`    -> 3rd group.