校招算法笔面试 | SQL笔试面试编程题-查找在职员工自入职以来的薪水涨幅情况

题目

题目链接

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

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值