第一步选出每个部门的最大薪资 dept_no salary

select d.dept_no,max(s.salary) from dept_emp d left JOIN

salaries s ON d.emp_no =s.emp_no

group by d.dept_no

第二步查出 员工编码 薪资

select d.emp_no,d.dept_no ,s.salary from dept_emp d left JOIN

salaries s ON d.emp_no =s.emp_no

第三步最后 根据上面俩表的共有dept_no 进行连接

把部门 最大薪资作为主表 员工编码 部门编码 薪资 最为附表

条件 部门号相等,薪资等于最大薪资, 这样每个部门所有是最大薪资的人都可以

显示,但是有有一个弊端,就是,假如在scalary有一条记录,但是在员工表里面他没有

就不会显示

select b.emp_no,a.dept_no,b.salary from

(select d.dept_no,max(s.salary) ms from dept_emp d left JOIN

salaries s ON d.emp_no =s.emp_no

group by d.dept_no) a LEFT JOIN

(select d.emp_no,d.dept_no ,s.salary from dept_emp d left JOIN

salaries s ON d.emp_no =s.emp_no ) b

ON a.dept_no=b.dept_no and a.ms=b.salary

这是别人的:写的比我好太多,利用窗口函数简洁
第一步即子查寻(利用了窗口函数):
查出 部门号 员工号 薪资 部门内的薪资排名s_rank (并列第一都是1)
第二布:从第一步的查询里面查出s_rank=1的就是每个部门里薪资最高的,有并列斗都会显示
select
dept_no,d.emp_no emp_no,salary,
DENSE_RANK() over(partition by dept_no order by salary desc) s_rank
from dept_emp d,salaries s
where d.emp_no=s.emp_no

select
a.dept_no,a.emp_no,a.salary
from
(
select
dept_no,d.emp_no emp_no,salary,
DENSE_RANK() over(partition by dept_no order by salary desc) s_rank
from dept_emp d,salaries s
where d.emp_no=s.emp_no) a
where s_rank=1
order by dept_no