tag 排序
截取数据
题目
查找入职员工时间排名倒数第三的员工所有信息
CREATE TABLEemployees
(
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
可以截取某一部分的数据,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 获取指定行数的数据集合
网友评论