题目描述:获取所有部门中当前(dept_emp.to_date = '9999-01-01')员工当前(salaries.to_date='9999-01-01')薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列。

  1. 分组(group by)计算每个部门的最高薪资(max);
  2. 连接员工部门信息表(dept_emp)和薪资表(salaries),以及第1步计算出的最高薪资,注意to_date的设置;
  3. 筛选工资等于最高薪资的人,查询相应的dept_no, emp_no, salary;
  4. 注意部门编号排序(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;