题解 | #获取每个部门中当前员工薪水最高的相关信息#
获取每个部门中当前员工薪水最高的相关信息
http://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6
1、首先进行表连接,连接字段是部门表的员工编号和工资表的员工编号,这样就可以将员工和其工资以及部门对应起来
2、因为题目要求在职员工,所以添加限制条件d.to_date='9999-01-01'
3、以上两步初步筛选出用于分析的数据,选择需要的字段部门编号(dept_no),工资(salary),员工编号(emp_no),以及使用窗函数对工资进行降序排名,这里使用rank()是并列跳跃排名,就是允许存在多个相同名次,但是下一个名次按前面的总人数计算,例如1134557。
窗函数over(patition by dept_no order by salary),新建窗口将表格按照部门进行分组,工资降序排列,配合rank()函数实现了将各部门员工工资降序排列。
4、最后将上表作为查询对象,取需要的字段,以及筛选条件,就是工资排名为1的员工,最后在根据部门编号升序排列。
完整代码如下:
select dept_no,e,salary
from(
select dept_no,
salary,
d.emp_no as e,
rank()over(partition by dept_no order by salary desc) rk
from dept_emp d
join salaries s
on d.emp_no=s.emp_no
where d.to_date='9999-01-01'
) m
where m.rk=1
order by dept_no