select
  dept_no,
  emp_no,
  salary
from
  (
    select
      dept_emp.dept_no,
      dept_emp.emp_no,
      salary,
      rank() over(
        partition by dept_emp.dept_no
        order by
          salary desc
      ) as rn
    from
      salaries
      left join dept_emp on dept_emp.emp_no = salaries.emp_no
  ) a
where
  rn = 1
Order by
  dept_no

确实窗口函数最简单,而且也不会出现两个人都是最高薪水 而出错的这种情况,

但是我还是没搞懂,为什么我这么写不对?(补充一下:any_value用于获取非聚合列

这不是差在重复值的情况嘛?为什么给的用例里有重复的时候就选的10004,而不是10003,就判定我错呢?

我知道了,这个any_value的问题,还是用窗口函数吧

select

dept_no,

any_value(s.emp_no),

max(salary) maxSalary

from dept_emp d join salaries s on d.emp_no = s.emp_no

group by dept_no

having max(salary)

order by dept_no asc