时间: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