题解和SQL优化!

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

http://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c

题意

给你一张员工信息表,请查询出其中入职时间上倒数第三的员工

思路

  • 因为同一个入职时间可能存在多个员工,所以我们需要先获取倒数第三入职对应的时间,我们同样根据hire_date字段进行排序分页即可,SQL如下

SQL1:

SELECT 
		hire_date 
FROM employees 
GROUP BY hire_date
ORDER BY hire_date DESC
LIMIT 1 OFFSET 2
  • 最后只需要查询出所有匹配该日期的记录即可(注意结果去重),最终SQL如下
SELECT
    emp_no,
    birth_date,
    first_name,
    last_name,
    gender,
    hire_date
FROM
    employees
WHERE hire_date = (
    SQL1
)

  优化:

  • 首先使用EXPLAIN查看执行计划,发现子查询和外部查询都使用全表扫描,没有用到索引
  • 且子查询需要使用临时表和文件排序 alt
  • 再查看JSON格式,发现开销为3.20 alt  
  • 根据执行计划,我们的想办法将文件排序去除,从SQL上看,排序针对的是hire_date字段,所以我们只需要在该字段上建立索引即可
  • 此时再查看执行计划,发现文件排序和临时表都消失了 alt
  • 再查看开销,此时降为了1.20! alt
MySQL练习 文章被收录于专栏

解析牛客网中的SQL题目

全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务