SQL刷题记录 D-1
1. 题目:查找最晚入职员工的所有信息
- 题目描述
查找最晚入职员工的所有信息
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`));
- 输出:
emp_no | birth_date | first_name | last_name | gender | hire_date |
---|---|---|---|---|---|
10008 | 1958-02-19 | Saniya | Kalloufi | M | 1994-09-15 |
- 代码:
SELECT * FROM employees
WHERE hire_date =
(SELECT MAX(hire_date) FROM employees)
- 思路:
利用MAX()函数,找到入职日期的最大值,即为最晚入职员工信息
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`));
- 输出:
emp_no | birth_date | first_name | last_name | gender | hire_date |
---|---|---|---|---|---|
10005 | 1955-01-21 | Kyoichi | Maliniak | M | 1989-09-12 |
- 代码:
我的:
SELECT * FROM employees
WHERE hire_date=(
SELECT hire_date FROM employees
ORDER BY hire_date DESC LIMIT 2,1
)
更严谨版,使用distinct
去重:
SELECT * FROM employees
WHERE hire_date=(
SELECT DISTINCT hire_date FROM employees
ORDER BY hire_date DESC LIMIT 2,1
)
- 思路:
Limit m,n 表示从第m+1条数据开始,取n条数据
Limit n 表示从第0条数据开始,取n条数据
所以这题选择将hire_date 按降序排列,即从近到远,然后从第三条数据开始,取一条数据即为倒数第三名员工的所有信息。
但是,讨论区有给出更严谨的答案,即用DISTINCT
去重,因为有可能一天之内有多名员工入职。
2019/11/12 困了溜了,明天继续