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

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

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

#第一种方案
# with
#     dateList as (
#         select
#             *,
#             dense_rank() over (
#                 order by
#                     hire_date
#             ) as ranknum
#         from
#             employees
#     )
# select
#     *
# from
#     employees
# where
#     hire_date in (
#         select
#             hire_date
#         from
#             dateList
#         where
#             ranknum = (
#                 select
#                     max(ranknum)
#                 from
#                     dateList
#             ) - 2
#     )
#第二种 利用order by offset
    select  
        * 
    from 
        employees
    where
        hire_date = (
            select 
                distinct 
                hire_date
            from 
                employees 
            order by
                hire_date desc
            limit 2,1
        ) # 如果要求出入职倒数第三的情况,也就是按照入职时间降序排序,正数第三个,但是入职人数会有多人,所以需要在子查询中查询日期放到条件查询中。

本题难度不是很高,个人有2种方法解决,一种是根据dense_rank排序,这种排序是非跨越式的,是可以通过查询最高的排名(正序)减去-2的情况来判断,这种排序可以在同一个顺序中对应多种情况。同理也可以先distinct求出所有入职的时间,根据查重后入职时间的数量-2

第二种方法就是

通过order by limit的方法。因为要求出倒数第三晚入职的情况,如果数据量正向排序,可以根据入职时间逆向排序,第三位就是入职时间倒数第三晚的情况。也就是limit 2,1 或者limit1 offset 2

全部评论

相关推荐

05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
程序员鼓励师阿欢:哈哈哈哈哈笑死我了😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务