第一步用join将两张表连接,并用窗口函数新建按部门分组和薪水降序的排序字段,完成一张包含ept_no,de.emp_no,salary,r的表,即
(
select dept_no,de.emp_no,salary,
row_number() over (partition by dept_no order by salary desc) as r
from
dept_emp de
join
salaries s
on de.emp_no=s.emp_no) as a
第二步重点,基于第一步,通过where a.r=1选出部门薪水最大的值,值得注意的是,第一步窗口函数选择row_number对salary排序则解决了第二步部门可能重复的问题,因为部门薪水最大值是唯一的,即
select dept_no,a.emp_no,salary as maxSalary
from
(
select dept_no,de.emp_no,salary,
row_number() over (partition by dept_no order by salary desc) as r
from
dept_emp de
join
salaries s
on de.emp_no=s.emp_no) as a
where a.r=1
order by dept_no