题解 | #对所有员工的薪水按照salary降序进行1-N的排名#

对所有员工的薪水按照salary降序进行1-N的排名

https://www.nowcoder.com/practice/b9068bfe5df74276bd015b9729eec4bf

这道题目要求我们对员工的薪水进行排名,我们要做的事情如下:

1. 确定总体问题

我们需要对员工的薪水进行排名,并返回员工编号、薪水以及排名。排名需要按照薪水降序排列,如果薪水相同,则按员工编号升序排列。我们需要使用窗口函数来实现排名。

2. 分析关键问题

  • 使用窗口函数进行排名:对所有员工的薪水进行降序排名。
  • 排序输出:按排名升序排列,如果排名相同则按员工编号升序排列。

3. 解决每个关键问题的代码及讲解

步骤1:使用窗口函数进行排名

我们使用DENSE_RANK窗口函数对所有员工的薪水进行降序排名:

select
    emp_no,
    salary,
    dense_rank() over (
        order by
            salary desc
    ) as t_rank
from
    salaries
  • DENSE_RANK() OVER (ORDER BY salary DESC) AS t_rank:对所有员工的薪水进行降序排名,DENSE_RANK会为相同薪水的员工分配相同的排名。
步骤2:排序输出

我们使用ORDER BY按排名升序排列,如果排名相同则按员工编号升序排列:

order by
    t_rank asc,
    emp_no asc
  • 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;
全部评论

相关推荐

LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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