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'

浙公网安备 33010602011771号