1. 分析表结构
- dept_emp:员工id,部门id
- salaries:员工id,工资
- 涉及字段:dept_emp(emp_no,dept_no), salaries(salary)
2. 解题步骤
2.1 查询每个部门的最高工资
因 dept_emp 表中没有 salary 字段,所以需要与 salaries 表联结, 然后根据部门id分组查询每个部门最高工资
SELECT e.dept_no, max( s.salary ) AS maxSalary FROM dept_emp e INNER JOIN salaries s ON e.emp_no = s.emp_no GROUP BY e.dept_no
2.2 查询最高工资的员工信息
将步骤 1 查询的结果作为虚表与 dept_emp 和 salaries 表联结,联结条件为部门ID和最大工资。
为什么要与部门表联结呢?工资表里不是有员工id吗?(这里有个坑,不同部门的员工最大工资可能会重复,所以仅使用工资作为联结条件,可能会返回错误结果)
SELECT e.dept_no, e.emp_no, maxSalary FROM dept_emp e INNER JOIN salaries s ON e.emp_no = s.emp_no INNER JOIN ( SELECT e.dept_no, max( s.salary ) AS maxSalary FROM dept_emp e INNER JOIN salaries s ON e.emp_no = s.emp_no GROUP BY e.dept_no ) AS m ON e.dept_no = m.dept_no AND s.salary = m.maxSalary
2.3 最后按照部门id排序即可
SELECT e.dept_no, e.emp_no, maxSalary FROM dept_emp e INNER JOIN salaries s ON e.emp_no = s.emp_no INNER JOIN ( SELECT e.dept_no, max( s.salary ) AS maxSalary FROM dept_emp e INNER JOIN salaries s ON e.emp_no = s.emp_no GROUP BY e.dept_no ) AS m ON e.dept_no = m.dept_no AND s.salary = m.maxSalary ORDER BY e.dept_no