PostgreSQL计算员工在各项目中的工时占比问题
按项目分组计算员工工时占比的实现方法
下面针对常用工具(Excel、SQL)给出具体实现方案,核心是按项目维度分组统计总工时,和你已掌握的全局占比计算逻辑差异仅在分组范围:
Excel 实现
假设你的数据结构为:
| 项目 | 工时 |
|---|---|
| 项目A | 20 |
| 项目A | 30 |
| 项目B | 15 |
| 项目B | 15 |
- 新增列(如D列)计算对应项目的总工时,公式:
=SUMIF(B:B, B2, C:C)
该公式会匹配当前行的项目,自动统计该项目的所有工时总和。 - 新增列(如E列)计算占比,公式:
=C2/D2
最后将E列单元格格式设置为「百分比」,即可得到每个员工在对应项目中的工时占比。
SQL 实现
用数据库处理时,通过窗口函数的PARTITION BY子句限定分组范围为项目,替代全局求和的窗口:
SELECT 员工, 项目, 工时, -- 按项目分组计算总工时,计算占比并保留两位小数 ROUND(工时 / SUM(工时) OVER (PARTITION BY 项目) * 100, 2) AS 项目工时占比百分比 FROM 你的工时表名称;
- 和全局占比的区别:全局占比使用
SUM(工时) OVER (),此处通过PARTITION BY 项目将求和范围限定在当前项目内。
内容的提问来源于stack exchange,提问作者Queuwe Rae
相关产品推荐
相关产品推荐

