DAY2
本文一共452字,读完大概需要5分钟
适用人群:sql初学者
问题来源:[牛客网sql在线编程题-2]
问题描述:查找入职员工时间排名倒数第三的员工所有信息
问题解决:形如查找某个字段为第几大的问题
1.可以通过将限制条件设为 入职时间 =入职时间倒数第三 来处理
其实如果仅是针对本题的数据,由于没有相同入职时间的员工,直接写
SELECT
*
FROM
employees
ORDER BY
hire_date DESC
LIMIT 1 OFFSET 2;
就可以通过,
但是如果存在相同入职时间的员工,由于limit1的限制,这种写法只能查询出一条结果,
所以严谨点来说,应该使用where作约束,将满足条件的数据全部获取:
SELECT
*
FROM
employees
WHERE
hire_date =
(
SELECT
hire_date
FROM
employees
ORDER BY
hire_date DESC
LIMIT 1 OFFSET 2
);
涉及关键字/函数(已经做过解释的不再赘述):
ORDER BY
DESC
LIMIT
OFFSET: 偏移量,在本题中是向下偏移两个找到第三位的意思。
问题引申: 关于LIMIT和OFFSET的组合使用有另一种写法
即在本题中,我们使用LIMIT 1 OFFSET 2来表示取一条数据,偏移两条数据,
但如果使用LIMIT X,Y的写法,就得写成LIMIT2,1
思考: 评论区有看到一种不使用limit的写法,可以作为另一种思路,留给同学们自己思考
select *
from employees
where hire_date=
(select min(a.hire_date)
from employees a,employees b
where a.emp_no!=b.emp_no and a.hire_date<b.hire_date
group by a.emp_no
having count(*)<3);