逐步拆解详细教学

  1. 题目让我们求每个部门中当前员工薪水最高的相关信息,在已知的两个表中,salaries表告诉我们员工的编号还有工资,dept_emp表则关联了员工的编号和所在的部门。
  2. 既然是求每个部门薪水最高的员工,那么我们第一步需要知道每个部门最高的薪水是多少?
-- 获取每个部门的最高薪资
select d.dept_no,max(salary) as maxSalary
from dept_emp d
join salaries s
on d.emp_no = s.emp_no
group by d.dept_no;
  1. 那么接下来我们知道每个部门的最高薪资了,只需要关联到员工身上就行,那么链接条件需要有两个,第一:这个员工的部门编号 第二:员工的工资要和部门最高工资对的上,我们创建一个临时表,用来同时存放员工的工号,部门号还有薪水,方便我们链接
-- 获取每个员工对应的薪水,部门号,工号
SELECT dept_emp.emp_no,dept_emp.dept_no,salaries.salary
FROM salaries 
join dept_emp
on salaries.emp_no = dept_emp.emp_no;

--  4. 安装3所述,链接上面两个表即可
-- 连接上面两个表
SELECT deptmax.dept_no, empinfo.emp_no, deptmax.maxSalary
FROM
(
    select d.dept_no,max(salary) as maxSalary
    from dept_emp d
    left join salaries s
    on d.emp_no = s.emp_no
    group by d.dept_no
) as deptmax
join 
(
    SELECT dept_emp.emp_no,dept_emp.dept_no,salaries.salary
    FROM salaries 
    join dept_emp
    on salaries.emp_no = dept_emp.emp_no
)as empinfo
on deptmax.dept_no = empinfo.dept_no and deptmax.maxSalary = empinfo.salary
ORDER BY deptmax.dept_no;