select emp_no, salary, DENSE_RANK() over(order by salary desc) as t_rank
from salaries
ORDER BY t_rank, emp_no;

这道题最难的地方在于,之前没有学过排名函数。

下面介绍几种排名方法。

-- 分数相同时,排名不同
row_number()
select salary, row_number() over(order by salary) from salaries;

-- 分数相同时,排名相同,但是后续排名不连贯
rank()
select salary, rank() over(order by salary) from salaries;

-- 分数相同时,排名相同,后续排名连贯
dense_rank()
select salary, dense_rank() over(order by salary) from salaries;

-- 分数相同时,排名亦不同
ntile(n)
select salary, ntile(5) over(order by salary) from salaries;

这四种方法各有不同,在多实践掌握吧。