You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL计算入职满2年员工的平均薪资涨幅百分比

计算员工入职满2年后的平均薪资涨幅百分比

这是个很典型的薪资数据分析需求,我来一步步拆解怎么用SQL实现它:

需求拆解

我们需要对比两个关键时间点的薪资:

  • 员工入职当天生效的初始薪资
  • 员工入职满2周年当天(或该时间点正在生效的薪资)
    然后计算每个符合条件员工的薪资涨幅百分比,最后求这些百分比的平均值。

表结构回顾

  • workers表:核心字段是worker_id(唯一标识员工)、hire_date(员工入职日期)
  • salaries表:记录员工的薪资变动历史,worker_id关联员工,salary是薪资数额,from_date/to_date标记该薪资的生效时间段

实现SQL代码

SELECT
    AVG(((s2.salary - s1.salary) / s1.salary) * 100) AS avg_salary_increase_pct
FROM
    workers w
JOIN
    salaries s1 ON w.worker_id = s1.worker_id AND s1.from_date = w.hire_date -- 关联入职时的初始薪资
JOIN
    salaries s2 ON w.worker_id = s2.worker_id 
        AND s2.from_date <= DATE_ADD(w.hire_date, INTERVAL 2 YEAR) -- 薪资在入职2年时已生效
        AND s2.to_date >= DATE_ADD(w.hire_date, INTERVAL 2 YEAR) -- 薪资在入职2年时仍有效
WHERE
    DATE_ADD(w.hire_date, INTERVAL 2 YEAR) <= CURDATE(); -- 过滤入职未满2年的员工

代码关键点解释

  1. 入职满2年日期计算:用DATE_ADD(w.hire_date, INTERVAL 2 YEAR)得到员工入职两周年的具体日期
  2. 初始薪资关联:通过s1.from_date = w.hire_date精准匹配员工入职当天生效的薪资记录
  3. 2年后薪资匹配:通过s2.from_date <= 入职2年日期和s2.to_date >= 入职2年日期,找到该时间点正在生效的薪资(因为薪资是区间生效的,不是每天都有记录)
  4. 涨幅计算:((s2.salary - s1.salary) / s1.salary) * 100得到单个员工的涨幅百分比,再用AVG()求平均值
  5. 过滤无效数据:最后用WHERE子句排除那些入职还没满2年的员工,避免无意义的计算

注意事项

  • 如果有些员工在入职2年时没有生效的薪资记录(比如刚好那天换了薪资但数据没衔接好),这类记录会被JOIN自动排除,不会影响平均值的准确性
  • 如果需要保留那些有初始薪资但2年后无薪资数据的员工(比如已离职),可以把JOIN改成LEFT JOIN,并在AVG()里用IFNULL处理NULL值(不过通常这类情况我们会过滤掉)

内容的提问来源于stack exchange,提问作者user9609362

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:25