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



京公网安备 11010502036488号