SQL18 - 查找当前薪水排名第二多的员工编号emp_no

题目描述:

查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,你可以不使用order by完成吗
 1 CREATE TABLE `employees` (
 2 `emp_no` int(11) NOT NULL,
 3 `birth_date` date NOT NULL,
 4 `first_name` varchar(14) NOT NULL,
 5 `last_name` varchar(16) NOT NULL,
 6 `gender` char(1) NOT NULL,
 7 `hire_date` date NOT NULL,
 8 PRIMARY KEY (`emp_no`));
 9 
10 CREATE TABLE `salaries` (
11 `emp_no` int(11) NOT NULL,
12 `salary` int(11) NOT NULL,
13 `from_date` date NOT NULL,
14 `to_date` date NOT NULL,
15 PRIMARY KEY (`emp_no`,`from_date`));

 

难易程度:

较难

 

解答:

使用了嵌套查询

 1 select employees.emp_no,max(b.salary) as salary ,employees.last_name,employees.first_name
 2 from employees left join 
 3 (select * from salaries where salaries.emp_no <> (select a.emp_no
 4 from (
 5 select employees.emp_no,max(salaries.salary)
 6 from employees left join salaries
 7 on employees.emp_no = salaries.emp_no
 8 where salaries.to_date='9999-01-01') a
 9 )
10 ) b
11 on employees.emp_no = b.emp_no
12 where b.to_date='9999-01-01'

 

 

posted @ 2020-09-30 11:27  Python小白白  阅读(363)  评论(0)    收藏  举报