01-查找最晚入职员工的所有信息-题解

查找最晚入职员工的所有信息

http://www.nowcoder.com/questionTerminal/218ae58dfdcd4af195fff264e062138f

题目描述

有一个员工employees表简况如下:

img

建表语句如下:

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`));

请你查找employees里最晚入职员工的所有信息,以上例子输出如下:img

题解

方法一:子查询

按理来说这个解法才是正解,因为最后一天不一定只有一个员工入职,也有可能多个员工同时在这一天入职。但其实题目说的模棱两可,貌似只考虑了最后一天只有一个员工的情况。

select * from employees where hire_date = (select max(hire_date) from employees);

运行时间:40ms
超过25.63%用Mysql提交的代码

占用内存:5944KB
超过1.95%用Mysql提交的代码

方法二:使用limit关键字

对入职时间降序排序后直接使用limit关键字即可。

select * from employees order by hire_date desc limit 1;

运行时间:40ms
超过25.63%用Mysql提交的代码

占用内存:5368KB
超过20.71%用Mysql提交的代码

可以看出占用内存略小于子查询的写法,一般情况下优先使用关键字。

limit函数复习

mysql里分页一般用limit来实现,类似SQLserver中top的用法。

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset;
limit 作用
limit(n) 取前n条记录
limit(m, n) 从第 m + 1 行开始取 n 条记录,n也可为负数
limit n offset m 效果同上

复习过后,我们尝试用两种写法再次将这个算法实现一下(效率同上)。

-- 使用limit 与 offset关键字
select * from employees
    order by hire_date desc
    limit 1 offset 0;

-- 仅使用limit关键字
select * from employees
    order by hire_date desc
    limit 0,1;
全部评论
可以。优先使用关键字 limit 可以减少占用内存。
点赞 回复
分享
发布于 2022-09-16 05:01 上海

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务