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

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

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

WITH t1 AS(
    SELECT emp_no, salary AS current_salary, from_date, to_date 
    FROM salaries
    WHERE to_date='9999-01-01'
),
t2 AS(
    SELECT s.emp_no, salary AS hire_salary, from_date, to_date 
    FROM salaries s
    INNER JOIN employees e ON s.emp_no = e.emp_no AND s.from_date = e.hire_date
)
SELECT t1.emp_no, current_salary - hire_salary AS growth
FROM t1
INNER JOIN t2 ON t1.emp_no = t2.emp_no
ORDER BY growth;

t1表

  • 作用:获取每个员工的当前薪资。
  • 逻辑:从 salaries 表中选择员工编号(emp_no)、当前薪资(salary)以及薪资生效的起止日期(from_date 和 to_date)。条件 to_date = '9999-01-01' 表示筛选出当前有效的薪资记录(假设 9999-01-01 表示“至今”),将当前薪资命名为 current_salary。

t2表

  • 作用:获取每个在职员工的入职时薪资。
  • 逻辑:从 salaries 表中选择员工编号(emp_no)和薪资(salary),并将其命名为 hire_salary。通过 INNER JOIN 将 salaries 表与 employees 表连接,条件是:员工编号相同(s.emp_no = e.emp_no),薪资生效日期等于入职日期(s.from_date = e.hire_date)。这样筛选出每个员工入职时的薪资记录。

主查询

  • 作用:计算每个员工的薪资增长,并按增长值排序。
  • 逻辑:使用 INNER JOIN 将 t1 和 t2 按员工编号连接。计算薪资增长:current_salary - hire_salary,并将结果命名为 growth。按薪资增长值(growth)升序排序,展示每个员工的薪资增长情况。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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