简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。
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进行升序排序,并给对应的区块内编号(也可以不写分区,就整个数据集为一个分区);
理论上来说如果有相同入职时间的人,这种方法就不科学了。