row_number() rank() dense_rank() 排名函数的用途及区别


row_number() rank() dense_rank() 排名函数简介

row_number()、rank()、dense_rank()三个函数都是应用于数据库表上排名;
row_number():为每一行数据根据字段排列方式依次返回一个连续的排序值
rank():为每一行数据根据字段的排列方式,进行排名,当排序字段具有相同值时,rank()返回相同的值,并且后续返回值会空出所占值
dense_rank():为每一行数据根据字段的排列方式,进行排名,当排序字段具有相同值时,rank()返回相同的值,并且后续返回值依次排列,不会占用空出值


row_number() rank() dense_rank()举例应用

/*第一步建表并插入数据*/
create table A(keyId int ,info varchar(10))

insert into A values(1,'a')
insert into A values(1,'a2')
insert into A values(10,'b')
insert into A values(100,'c')
insert into A values(110,'d')
insert into A values(120,'e')
insert into A values(130,'f')

/*第二步三种函数返回不同的排名值*/
select ROW_NUMBER() over(order by keyId asc ) as  [RowNumber],
RANK()  over(order by keyId asc )  as [rank],
dense_RANK()  over(order by keyId asc )  as [dense_rank],
* from A 

例:表A有7条数据
row_number 返回: 1、2、3、4、5、6、7
rank() 返回:1、1、3、4、5、6、7
dense_rank() 返回:1、1、2、3、4、5、6