> 文档中心 > MYSQL排名函数

MYSQL排名函数


MYSQL排名函数

需求:需要将班里同学根据分数情况进行排名
建表并插入数据:

CREATE TABLE student_score(id int not null ,name varchar(20) not null,score int not null);INSERT INTO student_score(id,name,score) VALUES(1,'鲁班',45);INSERT INTO student_score(id,name,score) VALUES(2,'鲁班大师',32);INSERT INTO student_score(id,name,score) VALUES(3,'李元芳',67);INSERT INTO student_score(id,name,score) VALUES(4,'西施',67);INSERT INTO student_score(id,name,score) VALUES(5,'貂蝉',89);INSERT INTO student_score(id,name,score) VALUES(6,'吕布',92);INSERT INTO student_score(id,name,score) VALUES(7,'赵云',75);

接下来按分数由高到低进行排序。

1、row_number()

对同一个字段进行排序,即使出现同分数,也不会并列排序,即排序按照1,2,3,4,5……的顺序。

SELECT *,row_number() over(ORDER BY score desc) from student_score 

结果如下:
MYSQL排名函数

2、rank()

对同一个字段进行排序,出现同分数进行并列排序,例如1,2,2,4,……,出现两次第四名并跳过第五名,也可以称作跳跃排名函数。

SELECT *,rank() over(ORDER BY score desc) t_rankfrom student_score 

MYSQL排名函数

3、dense_rank()

和rank()函数类似,对同一个字段进行排序,出现同分数进行并列排序,例如1,2,2,3,……,出现两次第二名但不会跳过第三名,也可以称作连续排名函数。

SELECT *,dense_rank() over(ORDER BY score desc) t_rank from student_score 

MYSQL排名函数