第一步选出每个部门的最大薪资 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