解题思路:
使用2个子查询,第一个子查询查出每个部门每名员工的薪水;第二个子查询查出每个部门的最高薪水。
1.查询查出每个部门每名员工的薪水
SELECT d.emp_no, d.dept_no, s.salary FROM dept_emp d LEFT JOIN salaries s ON d.emp_no = s.emp_no
执行结果如下:
2.查出每个部门的最高薪水
SELECT d.dept_no, max( salary ) salary FROM dept_emp d LEFT JOIN salaries s ON d.emp_no = s.emp_no GROUP BY d.dept_no
3.通过这两张子表做链接,只保留部门编号相同并且薪水相同的数据
所以最终的查询sql语句为
SELECT t1.dept_no, t1.emp_no, t1.salary FROM ( SELECT d.emp_no, d.dept_no, s.salary FROM dept_emp d LEFT JOIN salaries s ON d.emp_no = s.emp_no ) t1, ( SELECT d.dept_no, max( salary ) salary FROM dept_emp d LEFT JOIN salaries s ON d.emp_no = s.emp_no GROUP BY d.dept_no ) t2 WHERE t1.dept_no = t2.dept_no AND t1.salary = t2.salary ORDER BY t1.dept_no
运行结果为: