文章目录
1. 题目
- 题目来源:SQL1 查找最晚入职员工的所有信息
- 题目描述
查找employees里最晚入职员工的所有信息 - 表格
employees:
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
| 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
| 10003 | 1959-12-03 | Parto | Bamford | M | 1986-08-28 |
| 10004 | 1954-05-01 | Christian | Koblick | M | 1986-12-01 |
+--------+------------+------------+-----------+--------+------------+
- 所需结果
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10004 | 1954-05-01 | Christian | Koblick | M | 1986-12-01 |
+--------+------------+------------+-----------+--------+------------+
2. 题解
使用子查询进行条件限制:
SELECT *
FROM employees e
WHERE hire_date IN (SELECT MAX(hire_date) FROM employees)
反思:查询最大值所在的行
-
这题主要考察了查询了最大值所在的行(可能多行)
-
同时也考察了
MAX/MIN聚合函数
可以应用于非数值列,这里的日期字符串hire_date
-
注意,求最大值和求最大值所在的行,是两个不同的题——不论是使用聚合函数或排序窗口函数,后者必须使用到子查询,不可能一步到位!
-
使用WHERE条件筛选取最大日期,而不是使用排序
LIMIT 1
,因为可能有多行取这个最大值。 -
求最大值
SELECT MAX(hire_date) FROM employees
-
求最大值所在的行
SELECT * FROM employees WHERE hire_date = (SELECT MAX(hire_date) FROM employees)
版权声明:本文为Robin_Pi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。