SQL2 查找入职员工时间排名倒数第三的员工所有信息
简说Python
共 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 desc) as 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篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了 优秀的读者都知道,“点赞”传统美德不能丢
评论