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

tag 排序 截取数据

题目

查找入职员工时间排名倒数第三的员工所有信息
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));

思路

看到这个题目会瞬间想到排序,只有进行排序之后才能进行选取第行的数据,但是和查找最晚入职员工的所有信息不同的是,这个无法使用像max()min()这种简单函数来实现了,这就涉及到了order by,进行排序后,你会陷入另外一个坑,那就是怎么找出第三行的数据,通过查找有这种方法使用limit可以截取某一部分的数据,limittop的区别是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))

总结

  1. order by 的升降序排列
  2. limit 截取查询的部分结果集合
  3. top 获取指定行数的数据集合

你可能感兴趣的:(查找入职员工时间排名倒数第三的员工所有信息)