牛客网-SQL题库笔记
-
- 01.最晚入职员工的所有信息
- 02.查找入职员工时间排名倒数第三的员工所有信息
- 03.查找各个部门当前领导当前薪水详情以及其对应部门编号
- 04.查找所有已经分配部门的员工的last_name和first_name以及dept_no
- 05.查找所有员工的last_name和first_name以及对应部门编号dept_no
- 06.查找所有员工入职时候的薪水情况,给出emp_no以及salary
- 07.查找薪水变动超过15次的员工号emp_no以及其对应的变动次数t
- 08.找出所有员工当前具体的薪水salary情况
- 09.获取所有部门当前manager的当前的薪水情况,给出dept_no, emp_no以及salary
- 10.获取所有非manager的员工emp_no
- 11.获取所有员工当前的manager,如果员工是manager的话不显示
- 12.获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salary
- 13.查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,你可以不使用order by完成吗
- 14.查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
- 174.简单.第二高的薪水
01.最晚入职员工的所有信息
表.employees
emp_no | birth_date | first_name | last_name | gender | hire_date |
---|---|---|---|---|---|
10008 | 1958-02-19 | Saniya | Kalloufi | M | 1994-09-15 |
反思:拿到题目的第一反应是升序然后取最后一位,但是结果显示报错。
仔细看这个hire_date是年月日,而很有可能有员工在同一天入职。故答案不对。
换一个思路:由于在时间上我们要返回最晚入职的,所以可以考虑用max()函数选取最晚时间,此时若存在多个同一天入职的员工也进行返回。
select * from employees
where hire_date=(select max(hire_date) from employees);
02.查找入职员工时间排名倒数第三的员工所有信息
继续上表:
select * from employees
order by hire_date desc limit 1 offset 2;
03.查找各个部门当前领导当前薪水详情以及其对应部门编号
查找各个部门当前(dept_manager.to_date=‘9999-01-01’)领导当前(salaries.to_date=‘9999-01-01’)薪水详情以及其对应部门编号dept_no
(注:请以salaries表为主表进行查询,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列)
表.salaries
emp_no | salary | from_date | to_date | dept_no |
---|---|---|---|---|
10002 | 72527 | 2001-08-02 | 9999-01-01 | d001 |
10004 | 74057 | 2001-11-27 | 9999-01-01 | d004 |
10005 | 94692 | 2001-09-09 | 9999-01-01 | d003 |
10006 | 43311 | 2001-08-02 | 9999-01-01 | d002 |