第一步用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