mysql笔记——rank() over、dense_rank() over

题目:

有一个薪水表salaries简况如下:
 
 
对所有员工的薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列:
 
解题思路:
需要对salary进行1-N排名,需要用到rank() ovre(业务逻辑)函数,但又因有相同薪水的员工,这样在相同排名的下一位员工只需要在之前相同排名的基础上+1即可,故要用到dense_rank() over(业务逻辑)函数
 
知识点:
rank() over()与dense_rank() over()的作用基本相同,都是对查出指定条件后的进行排名,条件相同排名相同,排名间断不连续,区别在于dense_rank() over 排名是密集连续的
如果我们用rank() over的话,得到的结果如下:
select emp_no, salary, rank() over(order by salary desc) as t_rank 
from salaries

 

 

 

 达不到题目中要的效果,所以正确应该是使用dense_rank() over:

select emp_no, salary, dense_rank() over(order by salary desc) as t_rank 
from salaries

 

 

posted @ 2021-03-25 22:12  chanzjj  阅读(849)  评论(0)    收藏  举报