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
结果如下:
2、rank()
对同一个字段进行排序,出现同分数进行并列排序,例如1,2,2,4,……,出现两次第四名并跳过第五名,也可以称作跳跃排名函数。
SELECT *,rank() over(ORDER BY score desc) t_rankfrom student_score
3、dense_rank()
和rank()函数类似,对同一个字段进行排序,出现同分数进行并列排序,例如1,2,2,3,……,出现两次第二名但不会跳过第三名,也可以称作连续排名函数。
SELECT *,dense_rank() over(ORDER BY score desc) t_rank from student_score