当前位置:Gxlcms > 数据库问题 > 【转】MySql中row_number()、rank()、dense_rank() 的区别

【转】MySql中row_number()、rank()、dense_rank() 的区别

时间:2021-07-01 10:21:17 帮助过:31人阅读

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第三名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。

借助实例能更直观地理解:

假设现在有一张学生表student,学生表中有姓名、分数、课程编号。

select * from student;

技术图片

 现在需要按照课程对学生的成绩进行排序:

--row_number() 顺序排序
select name,course,row_number() over(partition by course order by score desc) rank from student;

技术图片

--rank() 跳跃排序,如果有两个第一级别时,接下来是第三级别
select name,course,rank() over(partition by course order by score desc) rank from student;

技术图片

--dense_rank() 连续排序,如果有两个第一级别时,接下来是第二级别 
select name,course,dense_rank() over(partition by course order by score desc) rank from student;

技术图片

【转】MySql中row_number()、rank()、dense_rank() 的区别

标签:each   重复   select   img   art   sql   core   假设   class   

人气教程排行