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

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

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

这道题目要求我们计算每个在职员工的薪水增长,我们要做的事情如下:

1. 确定总体问题

我们需要计算在职员工自入职以来的薪水涨幅,并返回员工编号及其对应的薪水涨幅。需要从员工表和薪水表中提取数据,通过员工编号进行连接,计算每个在职员工的薪水增长,并按增长幅度升序排列。

2. 分析关键问题

  • 获取入职时的薪水:通过员工的入职日期匹配薪水的生效日期。
  • 获取当前薪水:筛选出当前在职员工的最新薪水记录。
  • 计算薪水增长:计算当前薪水与入职时薪水的差值。
  • 排序输出:按薪水增长幅度升序排列输出结果。

3. 解决每个关键问题的代码及讲解

步骤1:获取入职时的薪水

我们通过员工的入职日期匹配薪水的生效日期,获取入职时的薪水:

select 
    s.emp_no,
    s.salary
from salaries s 
join employees e on e.hire_date = s.from_date
  • JOIN employees e ON e.hire_date = s.from_date:通过员工的入职日期匹配薪水的生效日期。
步骤2:获取当前薪水

我们筛选出当前在职员工的最新薪水记录:

select 
    emp_no,
    to_date,
    salary
from salaries
where to_date = '9999-01-01'
  • WHERE to_date = '9999-01-01':题目表明:to_date='9999-01-01'时,表示依然在职,无后续调整记录,故使用where筛选出当前在职员工的最新薪水记录。
步骤3:计算薪水增长

我们计算当前薪水与入职时薪水的差值:

select
    n.emp_no,
    n.salary - o.salary as growth
from(
    ...
)o#Onboarding
join(
    ...
)n#now
on o.emp_no = n.emp_no
  • n.salary - o.salary AS growth:计算薪水增长。
步骤4:排序输出

我们使用ORDER BY按薪水增长幅度升序排列输出结果:

order by
    growth
  • ORDER BY growth:按薪水增长幅度升序排列。

完整代码

#入职工资
select
    n.emp_no,
    n.salary - o.salary as growth
from(
    select 
    s.emp_no,
    s.salary
    from salaries s 
    join employees e on e.hire_date = s.from_date  
)o#Onboarding
#当前工资
join(
    select 
    emp_no,
    to_date,
    salary
    from salaries
    where to_date = '9999-01-01'
)n#now
    on o.emp_no = n.emp_no
order by
    growth
全部评论
那如果同一天入职的有很多人,那第一步的join employees e on e.hire_date = s.from_date 就是不对的了,这个怎么解决呢
2 回复 分享
发布于 04-15 17:16 山东

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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