2015-04-07 57 views
0

我使用SQL Server 2012的NTILE函數在SQL Server中,意外的輸出

查詢是:

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中的3列結果服務器,爲什麼它的行爲不同?

Ntile(2)應該給每個2號碼?

+1

'NTILE(2)'將您的結果集到*** *** 2組數據(因爲*** ***要求它!)試圖使他們儘可能大。如果您想要** 3 **組 - 請使用'NTILE(3)':... [有關'NTILE'的詳細信息,請參閱MSDN文檔](https://msdn.microsoft.com/en-us/library /ms175126.aspx)。 'NTILE(2)'將結果集分成** 2組數據** - 不是每組2行(如你所期望的) –

回答

1

NTILE TechNet文檔:

對於每一行,NTILE返回到該行 所屬的數量。

NTILE(2)創建組數據的,因此,返回的數字只能在(1,2)

你似乎認爲NTILE返回每個組內每行的位置,顯然不是這種情況。

如果使用NTILE(3)代替,然後組數據將被創建,即

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

感謝:「ntile(N)只會是{1, 2,3 .... N}'對嗎?而不是'{1,2,3 .... N + 1}' –

+0

@HareRamaHareKrishna請檢查我爲「ntile(3)'結果的解釋所作的編輯。 –