Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vous voulez en savoir plus sur NTILE()

Considérez-le comme des seaux, NTILE(2) fera 2 seaux, la moitié des lignes aura la valeur 1 et l'autre moitié la valeur 2

exemple

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

Voici la sortie, puisque vous avez un nombre impair de lignes, le bucket 1 aura 1 ligne de plus

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

Si vous ajoutez une ligne supplémentaire

insert #temp  values('S6',92 ) 

Maintenant, les deux compartiments ont 3 lignes

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

En réalité, je n'ai jamais utilisé NTILE dans le code de production, mais je peux voir l'utilisation où vous devez diviser les résultats en n nombre de compartiments