题目描述:获取所有部门中当前(dept_emp.to_date = '9999-01-01')员工当前(salaries.to_date='9999-01-01')薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列。
- 分组(group by)计算每个部门的最高薪资(max);
- 连接员工部门信息表(dept_emp)和薪资表(salaries),以及第1步计算出的最高薪资,注意to_date的设置;
- 筛选工资等于最高薪资的人,查询相应的dept_no, emp_no, salary;
- 注意部门编号排序(order by)。
select d.dept_no , d.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' join ( select d.dept_no, max(s.salary) maxsalary 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 ) m on d.dept_no = m.dept_no where m.maxsalary=s.salary order by d.dept_no
也可以通过窗口函数实现:
select t.dept_no,t.emp_no,t.salary from ( select de.dept_no,de.emp_no,s.salary, row_number() over(partition by de.dept_no order by s.salary desc) as rk 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 )t where t.rk=1;