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

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

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

方法一: 窗口函数【错误解法】

# select *
# from employees
# where hire_date = (select hire_date 
#                    from(select hire_date, row_number() over(order by hire_date desc) as num
#                         from employees) a
#                     where a.num = 3) 
# ;
错误原因:在开窗函数中,若order by 后的字段值不唯一,即出现雇用日期相同的情况,则会导致排序出现问题

方法一的改进:窗口函数【正确解法】

select *
from employees
where hire_date = (select distinct hire_date 
                   from(select hire_date, dense_rank() over(order by hire_date desc) as num
                        from employees) a
                    where a.num = 3) 
;
注意:这里需要使用dense_rank(),而不能使用rank(),具体区别请自行搜索查阅。

方法二:limit与offset的使用【正确解法】

select * 
from employees
where hire_date = (select distinct hire_date from employees order by hire_date desc limit 1 offset 2)
;
语法解释:limit后跟返回的行数,offset参数可选,表示在返回行之前跳过的行数
全部评论

相关推荐

点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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