select
D.dept_no,
D.emp_no,
D.salary
from 
(
  select
    rank()over(partition by C.dept_no order by C.salary desc) posn,
    C.dept_no,
    C.emp_no,
    C.salary
  from
    (
      select
        A.dept_no,
        A.emp_no,
        B.salary
      from
        dept_emp A
        join salaries B on A.emp_no = B.emp_no
      where
        A.to_date = '9999-01-01'
        and B.to_date = '9999-01-01'
    ) C
) D
where D.posn=1
order by D.dept_no

本题关键是要理清思路,有三层select查询,共分为4步:
1.贯穿整个代码的有三个字段dept_no、emp_no、salary,想好这一点,就开始思考下一步;
2.先做表连接,找到连接键,注意别名C;
3.套个子查询,后续整个表别名D,使用窗口函数rank()over(),对链接后的表格C进行对C.dept_no聚合、C.salary降序排序,别名posn;(窗口函数只是复制一个新的表进行排序,然后将序号返回到原表各自行的位置)
4.再套个子查询,直接用where筛选D表每个部门薪水排名第一的行,然后用order by对D.dept_no升序排序。