题解 196| #查找入职员工时间排名倒数第三的员工所有信#

查找入职员工时间排名倒数第三的员工所有信息

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

【场景】:查找最大值的所有信息、并列排序

【分类】:窗口函数dense_rank

分析思路

难点:

1.和SQL195一样,考虑到相同时间入职员工不止一名的情况。

员工表中的入职时间是只记录到天没有精确到秒,会有可能出现最晚入职的员工不止一名的情况。所以这也在启发我们建表的时候最好考虑到这种情况,把入职时间精确到秒。

2.并列排序,不会跳过重复的序号,例如1、1、2

(1)根据入职时间对员工信息排序

  • [使用]:窗口函数 dense_rank:并列排序,不会跳过重复的序号,比如1、1、2
  • [条件]:order by hire_date desc

(2)取入职时间倒数第三的员工信息

  • [条件]:where 3 = date_rank

求解代码

方法一:

with 子查询

with 
    main as(
        #利用窗口函数 dense_rank:并列排序,不会跳过重复的序号,比如1、1、2
        select
            emp_no,
            birth_date,
            first_name,
            last_name,
            gender,	
            hire_date,
            dense_rank() over(order by hire_date desc) as date_rank
        from employees
    )

#取入职时间倒数第三的信息
select 
    emp_no,
    birth_date,
    first_name,
    last_name,
    gender,	
    hire_date
from main
where 3 = date_rank
全部评论

相关推荐

点赞 评论 收藏
转发
1 1 评论
分享
牛客网
牛客企业服务