【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学习和实践的小记录

全部评论

相关推荐

牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务