套了两次表,不过思路还是很清晰。
解题思路:
第一步先把两张表连接在一起,以员工表为主表,工资表为辅助,因此用到左连接。此时诞生了t1表
(select de.emp_no, de.dept_no, salary
from dept_emp as de
left join salaries as s
on de.emp_no = s.emp_no
where de.to_date = '9999-01-01' and s.to_date = '9999-01-01') as t1
第二步用一个row_number()over()开窗函数。一次性把部门分组和工资排序问题给解决了。此时在t1的基础上诞生了t2表
(select t1.dept_no,t1.emp_no, t1.salary,
row_number()over(partition by t1.dept_no order by t1.salary desc) as R
from
(select de.emp_no, de.dept_no, salary
from dept_emp as de
left join salaries as s
on de.emp_no = s.emp_no
where de.to_date = '9999-01-01' and s.to_date = '9999-01-01') as t1) as t2
第三步在t2表的基础之上,筛选出我们需要的信息即可。
select t2.dept_no, t2.emp_no, t2.salary
from
(select t1.dept_no,t1.emp_no, t1.salary,
row_number()over(partition by t1.dept_no order by t1.salary desc) as R
from
(select de.emp_no, de.dept_no, salary
from dept_emp as de
left join salaries as s
on de.emp_no = s.emp_no
where de.to_date = '9999-01-01' and s.to_date = '9999-01-01') as t1) as t2
where t2.R=1
order by t2.dept_no