兔子带你零基础入门数据分析 | SQL牛客网刷题篇:2.查找入职员工时间排名倒数第三的员工所有信息

题目描述

查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天

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

问题分析

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

拆解问题:①员工所有信息 ②时间排名倒数第三

答案

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

解题思路
和第一题一样,用ORDER BY,DESC对入职时间进行排序,使用LIMIT,OFFSET函数取第一行数据得到结果。

扩展问题

题目中为了减轻入门难度,所有的数据里员工入职的日期都不是同一天,如果有同一天的情况应该如何查询呢?

答案

SELECT * 
FROM employees
WHERE hire_date = (
    SELECT DISTINCT hire_date       --用DISTINCT取不重复的入职时间
    FROM employees
    ORDER BY hire_date DESC        --入职时间倒序排列
    LIMIT 1 OFFSET 2               --选第三行的值,也就是我们想要的入职日期
);    

解题思路

当有多个员工同一天入职时,我们如果还用LIMIT会不知道取几行数值,这种情况可以用子查询找到入职倒数第三的员工,值得注意的是当有几个人同时在一天入职的时候我们需要用DISTINCT对日期进行限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值