如何将员工薪资总和汇总至对应公司记录(跨字段关联)
跨字段关联薪资汇总实现方案
现有员工与公司关联数据表
| Description | level | salary | code | parent company |
|---|---|---|---|---|
| James | 1 | 500 | 1234 | 1111 |
| John | 1 | 100 | 4321 | 1111 |
| Company name | 2 | null | 1111 | null |
关联逻辑:员工(level=1)通过parent company字段关联到对应公司的code字段,需求是计算每个公司下属员工的薪资总和,新增company salary字段,仅在公司记录中填入总和,员工记录该字段为null,期望输出如下:
期望输出数据表
| Description | level | salary | code | parent company | company salary |
|---|---|---|---|---|---|
| James | 1 | 500 | 1234 | 1111 | null |
| John | 1 | 100 | 4321 | 1111 | null |
| Company name | 2 | null | 1111 | null | 600 |
实现方法
1. SQL场景实现
如果是在数据库中处理,有两种常用写法:
写法1:子查询关联
SELECT t1.Description, t1.level, t1.salary, t1.code, t1.parent_company, CASE WHEN t1.level = 2 THEN (SELECT SUM(salary) FROM your_table t2 WHERE t2.parent_company = t1.code) ELSE NULL END AS company_salary FROM your_table t1;
核心逻辑:通过CASE判断当前行是否为公司记录(level=2),若是则用子查询统计所有关联到该公司的员工薪资总和,否则返回null。
写法2:窗口函数(适用于MySQL 8+、PostgreSQL等支持窗口函数的数据库)
SELECT Description, level, salary, code, parent_company, CASE WHEN level = 2 THEN SUM(salary) OVER (PARTITION BY parent_company) ELSE NULL END AS company_salary FROM your_table ORDER BY level, Description;
核心逻辑:用PARTITION BY parent_company按公司分组计算薪资总和,再通过CASE仅在公司记录中填充该值,员工记录留空。
2. Excel场景实现
如果是用Excel处理表格,直接用SUMIF函数即可:
- 在
company salary列的第一个单元格(比如F2)输入公式:=IF(B2=2, SUMIF(E:E, D2, C:C), "") - 下拉填充公式到所有行即可。
核心逻辑:IF(B2=2)判断是否为公司记录,SUMIF(E:E, D2, C:C)统计所有parent company等于当前公司code的员工薪资总和,员工记录返回空值对应需求的null。
内容的提问来源于stack exchange,提问作者aksent1344
相关产品推荐
相关产品推荐

