解题思路:
使用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 运行结果为:

京公网安备 11010502036488号