如果分区的行数不能被 integer_expression 整除,则将导致一个成员有两种大小不同的组。按照 OVER 子句指定的顺序,较大的组排在较小的组前面。
drop table dbo.wzg_test
create table dbo.wzg_test(
id int
,name varchar(10)
,grade decimal
)
declare @i int = 1
declare @j int = 60
while @i <= 20
begin
if @i%5 = 0
set @j = @j+10
insert into dbo.wzg_test values(@i,'wzg'+convert(varchar(10),@i),@j)
set @i = @i + 1
end
select row_number() over ( order by id asc) as row_number, *
from dbo.wzg_test
order by id asc
select row_number() over (partition by grade order by id asc) as row_number, *
from dbo.wzg_test
select rank() over (order by grade asc) as rank, *
from dbo.wzg_test
order by id asc
select dense_rank() over (order by grade asc) as dense_rank, *
from dbo.wzg_test
order by id asc
select ntile(3) over (order by grade asc) as ntile, *
from dbo.wzg_test
order by id asc