题目: sql18
思路一:
- 查找原表最高工资
- 查找除原表最高工资的情况下,查找原表第二高工资
- 筛选工资等于第二高工资的人员信息
select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary = -- 第三步: 将第二高工资作为查询条件
(
select max(salary) -- 第二步: 查出除了原表最高工资以外的最高工资(第二高工资)
from salaries
where salary <
(
select max(salary) -- 第一步: 查出原表最高工资
from salaries
where to_date = '9999-01-01'
)
and to_date = '9999-01-01'
)
and s.to_date = '9999-01-01'
思路二:
- 工资表自连接查询,group by 左表工资,havin条件:去重右表工资后 个数=2
- 筛选工资等于第二高工资的人员信息
select e.emp_no
, salary
, last_name
, first_name
from employees e
join salaries s
on e.emp_no = s.emp_no
where s.salary =
(
select s1.salary
from salaries s1
join salaries s2
on s1.salary <= s2.salary
where s1.to_date='9999-01-01'
and s2.to_date='9999-01-01'
group by s1.salary
having count(distinct s2.salary) = 2 -- !!!!!!!!!!!
)
and s.to_date='9999-01-01'