这道题 考察的是多表查询和窗口函数 先将dept_emp和salaries进行左外链接 得到 每个部门员工薪水
a.emp_no,
a.dept_no,
b.salary
FROM
dept_emp a
LEFT JOIN salaries b ON a.emp_no = b.emp_no
得到结果如下
然后使用窗口函数 dense_rank()窗户函数进行排名排序,分组是dept_no,按照salary进行降序排序
SELECT
a.emp_no,
a.dept_no,
b.salary,
dense_rank() over(partition by a.dept_no order by b.salary desc) as rank1
FROM
dept_emp a
LEFT JOIN salaries b ON a.emp_no = b.emp_no
得到 按照部门分类的薪资排序表 如图 然后子查询这个表,将rank1=1的筛选出来即可
select
a.dept_no,
a.emp_no,
a.salary as maxSalary
from
(SELECT
a.emp_no,
a.dept_no,
b.salary,
dense_rank() over(partition by a.dept_no order by b.salary desc) as rank1
FROM
dept_emp a
LEFT JOIN salaries b ON a.emp_no = b.emp_no)a
where rank1=1
order by dept_no
如图