【SQL222】题解 | 对所有员工的薪水按照salary降序进行1-N的排名
对所有员工的薪水按照salary降序进行1-N的排名
https://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf
# 思路: # 1.先按照salary降序先进行有重复序号的1~N的排名,然后先按照t_rank升序排列,再按照emp_no升序排列 select emp_no, salary, t_rank from (select emp_no, salary, dense_rank() over (order by salary desc) as t_rank from salaries) t order by t_rank asc, emp_no asc; # 不用子查询
这道题是对所有员工的薪水按照salary降序先进行1-N的排名,如果salary相同,再按照emp_no升序排列。
还可以优化为:
select
emp_no,
salary,
dense_rank() over (
order by
salary desc
) as t_rank
from
salaries
order by
t_rank asc,
emp_no asc;
# 不用子查询
两个关键点:
1.先按照salary降序先进行有重复序号的1~N的排名
dense_rank() over (order by salary desc)
2.然后先按照t_rank升序排列,再按照emp_no升序排列
order by t_rank asc, emp_no asc
完整代码如下:
select
emp_no,
salary,
dense_rank() over (
order by
salary desc
) as t_rank
from
salaries
order by
t_rank asc,
emp_no asc;
完结
SQL学习专栏 文章被收录于专栏
发个sql学习和实践的小记录

查看11道真题和解析