查找入职员工时间排名倒数第三的员工所有信息
tag 排序 截取数据
题目
查找入职员工时间排名倒数第三的员工所有信息
CREATE TABLEemployees(
emp_noint(11) NOT NULL,
birth_datedate NOT NULL,
first_namevarchar(14) NOT NULL,
last_namevarchar(16) NOT NULL,
genderchar(1) NOT NULL,
hire_datedate NOT NULL,
PRIMARY KEY (emp_no));
思路
看到这个题目会瞬间想到排序,只有进行排序之后才能进行选取第行的数据,但是和查找最晚入职员工的所有信息不同的是,这个无法使用像max()和min()这种简单函数来实现了,这就涉及到了order by,进行排序后,你会陷入另外一个坑,那就是怎么找出第三行的数据,通过查找有这种方法使用limit可以截取某一部分的数据,limit和top的区别是top是无法截取数据的只能从头获取指定行数的数据,除非你获取第一行数据,否则top是没办法截取一行数据的,所以只能通过limit来解决,既然可以截取好多行,那我就让limit后面的两个数据一样,这样不就截取了一行吗?然后你就会有这样的答案
select * from employees where (hire_date = (select hire_date from employees order by hire_date desc limit 3,3))
但为什么还是不对呢?这里要注意一点limit后面的行并不是从1开始的,是从0开始的,所以最终答案要改成
select * from employees where (hire_date = (select hire_date from employees order by hire_date desc limit 2,2))
总结
- order by 的升降序排列
- limit 截取查询的部分结果集合
- top 获取指定行数的数据集合