刚开始的思路:联结两个表后使用GROUP BY 和MAX聚合函数,但是在mysql环境中通不过
SELECT dept_no,dept_emp.emp_no,MAX(salary) AS salary FROM dept_emp INNER JOIN salaries ON dept_emp.emp_no=salaries.emp_no WHERE dept_emp.to_date = '9999-01-01' AND salaries.to_date='9999-01-01' GROUP BY dept_no ORDER BY dept_no
后来看了评论区的分析,重新整理:
先找出各个部门最高的薪资,再找到各个员工的部门、薪资,联结查询后的两个表,这里筛选时需要两个条件,一个是部门,一个是最高薪资
SELECT a.dept_no,b.emp_no,a.salary FROM (SELECT dept_no,MAX(salary) AS salary FROM salaries INNER JOIN dept_emp ON dept_emp.emp_no=salaries.emp_no WHERE dept_emp.to_date = '9999-01-01' AND salaries.to_date='9999-01-01' GROUP BY dept_no) AS a INNER JOIN (SELECT dept_no,dept_emp.emp_no,salary FROM dept_emp INNER JOIN salaries ON dept_emp.emp_no=salaries.emp_no WHERE dept_emp.to_date = '9999-01-01' AND salaries.to_date='9999-01-01')AS b ON a.salary=b.salary AND a.dept_no=b.dept_no ORDER BY dept_no