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

SQL实现:按emp_id计算员工薪资百分比差异

问题需求

现有test1表,表结构及插入数据的SQL语句如下:

CREATE TABLE test1 (in_date date, emp_id int , salary int);

INSERT INTO test1 (in_date, emp_id, salary)
VALUES
('01-01-2020',1,4000),
('01-01-2020',2,3000),
('01-01-2020',3,6000),
('01-01-2020',4,9000),
('02-01-2020',1,2000),
('02-01-2020',2,5000),
('02-01-2020',3,4200),
('02-01-2020',4,8500);

对应的数据表内容:

In_dateemp_idsalary
01-01-202014000
01-01-202023000
01-01-202036000
01-01-202049000
02-01-202012000
02-01-202025000
02-01-202034200
02-01-202048500

需要编写SQL查询,按emp_id计算薪资的百分比变化,输出格式如下:

emp_idper_diff_salary
150%
2-67%
330%
46%

解决方案

核心逻辑

每个员工有两条时间序列的薪资记录:01-01-2020为初始薪资,02-01-2020为对比薪资。百分比变化计算公式为:((初始薪资 - 对比薪资) / 初始薪资) * 100,最终取整并拼接百分号。

SQL查询语句

SELECT 
    emp_id,
    CONCAT(
        ROUND(((t1.salary - t2.salary) / t1.salary) * 100),
        '%'
    ) AS per_diff_salary
FROM test1 t1
JOIN test1 t2 
    ON t1.emp_id = t2.emp_id 
    AND t1.in_date = '01-01-2020' 
    AND t2.in_date = '02-01-2020'
ORDER BY emp_id;

语句说明

  1. 自连接匹配数据:将test1表分别作为t1(初始薪资表)和t2(对比薪资表),通过emp_id关联,同时指定两张表的日期条件,确保每个员工的两条记录精准匹配。
  2. 计算并格式化结果:用公式算出变化率后,通过ROUND()取整,再用CONCAT()拼接百分号,得到需求的格式。
  3. 排序输出:按emp_id排序,与目标输出顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:36:29