题解 | #查找在职员工自入职以来的薪水涨幅情况#
查找在职员工自入职以来的薪水涨幅情况
https://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5
select e.emp_no,sum(growth) from employees e join (select *, salary - lag(salary,1)over(partition by emp_no order by to_date) growth from salaries) a on e.emp_no=a.emp_no group by e.emp_no having max(to_date) = '9999-01-01' order by sum(growth)
查询结果:员工编号,薪水总涨幅
查询来源:employees,salaries
查询条件,在职的员工,查询结果按薪水总涨幅进行排序
解题思路:因为员工编号和薪水数据分别在employees,salaries表中,所以需要对两表进行连接,两表的链接健为员工编号。接下来需要计算员工总涨幅:使用窗口偏移函数,lag()over()对员工编号进行分区后对日期进行排序,lag的参数选择salary,1就可以得到每个员工按日期排序上一次的薪资水平,用这一次的薪资水平减去上一次的薪资水平即可得到薪水涨幅;随后将两表进行连接后对员工编号进行聚合,即可得到每个员工的薪资总涨幅(sum(salary)),最后按日期最大值等于‘9999-01-01’的条件筛选出目前在职的员工,按薪水总涨幅进行排序
查看20道真题和解析