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

有一个员工employees表简况如下:
图片说明
建表语句如下:

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));

请你查找employees里入职员工时间排名倒数第三的员工所有信息,以上例子输出如下:
图片说明

SELECT *
FROM employees
ORDER BY hire_date DESC LIMIT 1 OFFSET 2;

但是上面的有一点不好就是,如果说有多个员工最晚的同一天入的职,那么倒数第三位就不一定是答案了,所以要去重。

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 DISTINCT hire_date
from employees
ORDER BY hire_date DESC
LIMIT 2,1
);

select *
from employees
WHERE hire_date = (
select hire_date
from employees
GROUP BY hire_date
ORDER BY hire_date DESC
LIMIT 2,1
);

group by 和distinct 都能够去重。

补充知识点,关于LIMIT ,OFFSET 的使用:select* from test LIMIT 3;
当 limit后面跟一个参数的时候,该参数表示要取的数据的数量。 表示直接取前三条数据,类似sqlserver里的top语法。

以下的两种方式均表示取2,3,4三条数据。
1.select* from test LIMIT 1,3;
当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量。

2.select * from test LIMIT 3 OFFSET 1;(在mysql 5以后支持这种写法)
当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务