【解题思路】

  • 三种排名rank、row_number、dense_rank函数的区别

1.rank函数
按值排序,值相等时会出现并列排名,但并列排名结束后新排名会出现断层,如1、2、3、4、4、4、7、8;

2.dense_rank函数
考虑并列的情况,区别在于rank会跳值,如1、2、3、4、4、4、5、6;

3.row_number函数
不考虑并列的情况,哪怕分数相同,排名都是一溜下来的自然数;

  • 而题目要求显示结果排名为1、2、2、3,故选择使用dense_rank函数
SELECT emp_no,salary,DENSE_RANK() OVER (ORDER BY salary DESC) AS t_rank
FROM salaries
ORDER BY t_rank,emp_no;