Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Möchten Sie mehr über NTILE() erfahren?

Stellen Sie es sich als Buckets vor, NTILE(2) macht 2 Buckets, die Hälfte der Zeilen hat den Wert 1 und die andere Hälfte den Wert 2

Beispiel

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

Hier ist die Ausgabe, da Sie eine ungerade Anzahl von Zeilen haben, hat Bucket 1 eine Zeile mehr

1   S1  75
1   S2  83
1   S4  83
2   S3  91
2   S5  93

Wenn Sie eine weitere Zeile hinzufügen

insert #temp  values('S6',92 ) 

Jetzt haben beide Buckets 3 Reihen

1   S1  75
1   S2  83
1   S4  83
2   S3  91
2   S6  92
2   S5  93

In Wirklichkeit habe ich NTILE nie im Produktionscode verwendet, aber ich kann die Verwendung sehen, bei der Sie die Ergebnisse in eine Anzahl von n-Buckets aufteilen müssen