方法1)开窗函数 PARTITION BY
SELECT a.dept_no, a.emp_no, a.salary FROM( SELECT de.dept_no,de.emp_no,s.salary, rank() over(PARTITION BY de.dept_no ORDER BY s.salary DESC) rank_n FROM dept_emp AS de JOIN salaries AS s ON de.emp_no=s.emp_no WHERE s.to_date='9999-01-01' AND de.to_date='9999-01-01')a WHERE a.rank_n = 1;
方法2)开窗函数 PARTITION BY
SELECT a.dept_no,a.emp_no,a.salary FROM( SELECT de.dept_no,de.emp_no,s.salary, rank() over(PARTITION BY de.dept_no ORDER BY s.salary DESC) AS rank_num FROM ( SELECT * FROM dept_emp WHERE to_date='9999-01-01') de INNER JOIN( SELECT * FROM salaries WHERE to_date='9999-01-01') s ON de.emp_no=s.emp_no )a WHERE a.rank_num=1;
方法3)子查询
SELECT d1.dept_no, d1.emp_no, s1.salary FROM dept_emp AS d1 INNER JOIN salaries AS s1 ON d1.emp_no=s1.emp_no AND d1.to_date='9999-01-01' AND s1.to_date='9999-01-01' WHERE s1.salary IN (SELECT MAX(s2.salary) FROM dept_emp AS d2 INNER JOIN salaries AS s2 ON d2.emp_no=s2.emp_no AND d2.to_date='9999-01-01' AND s2.to_date='9999-01-01' AND d2.dept_no = d1.dept_no ) ORDER BY d1.dept_no;方法借鉴于网友,但个人感觉存在漏洞
- 假设第二个最高工资表中有5000及10000两个数据,而部门d0002中员工的工资为5000,10000,会同时输出这两个员工的工资