day2
codedecent 940 0

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);
评论区

索引目录