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

共 1699字,需浏览 4分钟

 ·

2021-07-21 14:11

↑↑↑关注后"星标"简说Python

人人都可以简单入门Python、爬虫、数据分析
 简说Python推荐 

题目来源:牛客网

解答:老表

首先说下上一题中留的讨论问题:为什么where中不能使用聚合函数?

理由很简单,聚合函数是对列进行操作的,而where是对行数据进行筛选的,所以不能在where中不能使用聚合函数,但是在having中是可以使用的。

为什么呢?你可以评论区留言说说你的看法。

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

我的思路: 先取出入倒数第三的hire_date(员工入职日期),然后取出对应hire_date(员工入职日期)的数据行即可。

我的题解:

select *
from employees 
where hire_date = (
    select hire_date
    from employees
    group by hire_date
    order by hire_date desc
    limit 2,1
);

涉及知识点:

  • 子查询(嵌套查询)
  • 子查询sql执行顺序:from-group by-select-order by-limit,补充完整sql执行顺序:
from -> where -> group by -> having -> select -> order by -> limit
  • 排序:order by 字段名称 desc/asc (desc 降序,asc 升序)
  • 从指定位置开始取出指定行:limit m,n

提交结果:

其他题解学习:
思路: 首先按hire_date进行降序排序,然后直接利用row_number()函数给数据进行标号,取出标号为3的那条数据即可。

select emp_no, birth_date, first_name, last_name, gender, hire_date
from (
    select *, row_number() over (order by hire_date descas rownum
    from employees
    ) a1
where rownum = 3;

另外还有几个新增知识点:

  • row_number() over (partition by col1 order by col2)  表示按col1进行分区,然后每个区块内按col2进行升序排序,并给对应的区块内编号(也可以不写分区,就整个数据集为一个分区);

理论上来说如果有相同入职时间的人,这种方法就不科学了。

题目地址:https://www.nowcoder.com/ta/sql


--END--


扫码即可加我微信

观看朋友圈,获取最新学习资源


学习更多:
整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了
优秀的读者都知道,“点赞”传统美德不能丢 
浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报