题目:
查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天
CREATE TABLE employees
(
emp_no
int(11) NOT NULL,
birth_date
date NOT NULL,
first_name
varchar(14) NOT NULL,
last_name
varchar(16) NOT NULL,
gender
char(1) NOT NULL,
hire_date
date NOT NULL,
PRIMARY KEY (emp_no
));
解题思路:
链接:https://www.nowcoder.com/questionTerminal/ec1ca44c62c14ceb990c3c40def1ec6c?answerType=1&f=discussion
来源:牛客网
方法1:子查询(最佳)
select * from employees
where hire_date =
(select distinct hire_date from employees
order by hire_date desc
limit 1 offset 2);
或:
select * from employees
where hire_date =
(select hire_date from employees
group by hire_date
order by hire_date desc
limit 1 offset 2);
补充:
若存在多人(如3人)同时在最晚的一天入职的情形,必须要考虑去重(使用distinct或者group by)
distinct和group by的执行顺序都在limit前面
链接:https://www.nowcoder.com/questionTerminal/ec1ca44c62c14ceb990c3c40def1ec6c?answerType=1&f=discussion
来源:牛客网
方法2:使用limit或者offset关键字
select * from employees
order by hire_date desc limit 2,1;
或
select * from employees
order by hire_date desc limit 1 offset 2; 总结:
方法1适用于存在多个员工入职同时达到最晚一天的情况。泛用性更好。