思路
- 获取部门编号、每个部门员工的最高薪水
select de.dept_no, max(s.salary) maxSalary from salaries s, dept_emp de where s.emp_no = de.emp_no group by de.dept_no;
- 获取部门编号、员工编号、当前薪水
select de.dept_no, s.emp_no, s.salary from salaries s, dept_emp de where s.emp_no = de.emp_no;
- 连接1和2的表格,获取每个部门中当前员工薪水最高的相关信息
答案
select emp_info.dept_no, emp_info.emp_no, emp_max.maxSalary
from (
select de.dept_no, s.emp_no, s.salary
from salaries s, dept_emp de
where s.emp_no = de.emp_no
) emp_info, /*部门编号、员工编号、当前薪水*/
(
select de.dept_no, max(s.salary) maxSalary
from salaries s, dept_emp de
where s.emp_no = de.emp_no
group by de.dept_no
) emp_max /*部门编号、每个部门员工的最高薪水*/
where emp_info.dept_no = emp_max.dept_no
and emp_info.salary = emp_max.maxSalary
order by emp_max.dept_no;优化
看过评论之后,发现没有通过 to_date 筛选当前员工,评论中更好的答案如下:
select uni.dept_no, uni.emp_no, max_salary.salary
from
(select d.dept_no, s.emp_no, s.salary
from dept_emp d join salaries s
on d.emp_no = s.emp_no
and d.to_date = '9999-01-01'
and s.to_date = '9999-01-01'
) as uni, /* 部门编号,员工编号,当前薪水 */
(select d.dept_no, max(s.salary) as salary
from dept_emp d join salaries s
on d.emp_no = s.emp_no
and d.to_date = '9999-01-01'
and s.to_date = '9999-01-01'
group by d.dept_no
) as max_salary /* 部门编号,当前最高薪水 */
where uni.salary = max_salary.salary
and uni.dept_no = max_salary.dept_no
order by uni.dept_no;
京公网安备 11010502036488号