同一个部门最高工资可能有多个员工,,要求只输出任意一个,所以下面的思路不行

select dept_no,t2.emp_no,salary as maxSalary

from (

select dept_no,max(salary) maxsal

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

group by dept_no

) as t1 join (select emp_no,salary from salaries) as t2 on t1.maxsal=t2.salary

思路:

1.连接dept_emp和salaries,方便后续根据部门分组,来统计工资,或者使用其他操作

2.窗口函数,每个部门根据员工工资进行排名,工资相同,也不能并列排名,然后取出所有排名第一的员工,即工资最高

select dept_no,emp_no,salary as maxSalary
from (
    select dept_emp.emp_no,dept_emp.dept_no,salaries.salary,
    dense_rank()over(partition by dept_no order by salary desc) as posn
    from dept_emp join salaries on dept_emp.emp_no=salaries.emp_no
) as t1
where t1.posn=1