SELECT currentsalary.dept_no, currentsalary.emp_no, currentsalary.salary AS salary
FROM 
-- 创建maxsalary表用于存放当前每个部门薪水的最大值
    (SELECT d.dept_no, MAX(s.salary) AS salary
     FROM salaries AS s INNER JOIN dept_emp As d
     ON d.emp_no = s.emp_no 
     WHERE d.to_date = '9999-01-01' AND s.to_date = '9999-01-01'
     GROUP BY d.dept_no) AS maxsalary, 
-- 创建currentsalary表用于存放当前每个部门所有员工的编号和薪水
    (SELECT d.dept_no, s.emp_no, s.salary 
     FROM salaries AS s INNER JOIN dept_emp As d
     ON d.emp_no = s.emp_no 
     WHERE d.to_date = '9999-01-01' AND s.to_date = '9999-01-01'
     ) AS currentsalary
-- 限定条件为两表的dept_no和salary均相等
WHERE currentsalary.dept_no = maxsalary.dept_no
AND currentsalary.salary = maxsalary.salary
-- 最后以currentsalary.dept_no排序输出符合要求的记录表
ORDER BY currentsalary.dept_no

select dms.dept_no, emp_no, max_salary
from
(select dept_no, max(salary) as max_salary
from dept_emp, salaries
where dept_emp.emp_no = salaries.emp_no
group by dept_no) as dms,
(select dept_no, salary, dept_emp.emp_no as emp_no
from dept_emp, salaries
where dept_emp.emp_no = salaries.emp_no) as des
where dms.max_salary = des.salary
and dms.dept_no = des.dept_no
order by dms.dept_no;

这道题真是不容易啊,之前虽然做过一次,但是只是大概记得聚类函数和分组会有冲突,会出问题,但是具体什么问题又不清楚。

自己又不想去看上一次做的时候的思路,于是一条路走到黑。

在这期间,试过视图、多个关联表等。最后终于把路给走通了。心情舒畅呢。

大致的想法就是,先创建一个包含所有员工编号、部门编号和薪水的临时表,再创建一个根据包含部门以及各部门最高薪水的临时表,最后通过部门以及薪水将两个表关联起来就是所要获取的数据了。

haha,刚刚回去看了一眼上一次写的代码,发现最后两个是一个思路。。。