题解 | 查找在职员工自入职以来的薪水涨幅情况
查找在职员工自入职以来的薪水涨幅情况
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)升序排序,展示每个员工的薪资增长情况。
