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

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

https://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5

我和题解对于“薪水涨幅情况”理解有所有不同。我理解成从入职到当前所的有多个时间段和各自有对应的growth。题解的解读是从入职到当前两个时间点上薪水变化。

按照我的理解,我的解题思路是:利用CTE,先筛选在职员工(max(date) = '9999-01-01')current_employees,然后从salaries里找出所有在职员工,每个员工可能对应对各from_date,据此利用窗口函数partition by emp_no,找到每个from_date的前一个from_date的数据,做差之后就是growth。最后再排序,需要注意第一期from_date之前是没有数据的,所有会出现null的情况,最后排序之前需要做筛选。

with
    current_employees as (
        select
            emp_no,
            max(to_date)
        from
            salaries
        group by
            emp_no
        having
            max(to_date) = '9999-01-01' -- cast('9999-01-01' as date)
    ),
    summary as (
        select
            emp_no,
            salary,
            from_date,
            salary - lag(salary) over (
                partition by
                    emp_no
                order by
                    from_date
            ) as growth
        from salaries 
        where emp_no in (
            select emp_no from current_employees
        )
    )
select
    emp_no,
    growth
from
    summary
where growth is not null
order by
    growth

其实根据输出样例,只有emp_no和growth,我理应推测出题目的意思,即从入职到当前这两个时间点上的薪资变化。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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