Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Quer saber mais sobre NTILE()


Pense nisso como baldes, NTILE(2) fará 2 baldes, metade das linhas terá o valor 1 e a outra metade o valor 2

exemplo
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

Aqui está a saída, já que você tem um número ímpar de linhas, o bucket 1 terá 1 linha a mais
1   S1  75
1   S2  83
1   S4  83
2   S3  91
2   S5  93

Se você adicionar mais uma linha
insert #temp  values('S6',92 ) 

Agora os dois buckets têm 3 linhas
1   S1  75
1   S2  83
1   S4  83
2   S3  91
2   S6  92
2   S5  93

Na realidade, nunca usei o NTILE no código de produção, mas posso ver o uso em que você precisa dividir os resultados em n números de buckets