获取每个部门中当前员工薪水最高的相关信息

获取每个部门当前员工的最高值

题目描述

有一个员工表dept_emp简况如下:

员工表

有一个薪水表salaries简况如下:

薪水表

获取所有部门中员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列,以上例子输出如下:

输出信息表

思路

方法一:

  • 先将每个人和工资、部门联系起来,然后使用where
  • 条件是(部门,工资) in 子查询(部门,最高工资)
-- 方法一
select d.dept_no,d.emp_no,s.salary
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
where (d.dept_no,s.salary) in (
-- in 的用法可以使用元组形式
    -- 找出部门和对应的最高工资
select d.dept_no,max(s.salary)
    from dept_emp as d
    join salaries as s
    on d.emp_no = s.emp_no
    group by d.dept_no
)
-- 应付题目要求,排序输出
order by d.dept_no

方法二:

  • 先将每个部门最高工资和对应的部门找出来,形成表t2;
  • 再将每个人对应的工资及对应的部门找出来形成表t1
  • 再将t1和t2连接,条件是部门相同,工资相同
select t2.dept_no,t1.emp_no,t2.maxSalary
from
-- t1表——通过连接两个表找到每个人对应的工资和部门
(select s.emp_no,d.dept_no,s.salary from
dept_emp as d join salaries as s 
on d.emp_no=s.emp_no) 
as t1 join
-- t2表——通过连接两个表找到每个部门对应的最高工资
(select d.dept_no,max(s.salary)as maxSalary from dept_emp d
join salaries as s on d.emp_no =s.emp_no group by d.dept_no) 
as t2
-- 通过部门编号来进行连接两个生成的表
on t1.dept_no=t2.dept_no and t1.salary=t2.maxSalary 
-- 按照部门编号升序排列
order by t2.dept_no

你可能感兴趣的:(获取每个部门中当前员工薪水最高的相关信息)