题解 | #查找在职员工自入职以来的薪水涨幅情况#

查找在职员工自入职以来的薪水涨幅情况

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’的条件筛选出目前在职的员工,按薪水总涨幅进行排序

全部评论

相关推荐

评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务