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

如何用T-SQL计算每位员工每小时平均页数?现有语句结果不符

修正后的员工每小时平均页数计算方法

你的SQL问题出在子查询没有按员工关联过滤,所以计算的是全表总页数除以总时长,每个员工都显示同一个总平均值。要得到每位员工的个人平均,需要按员工分组,分别计算每个员工的总页数和总时长再做除法。

基础解决方案(假设两表员工一一对应)

如果Table1(时长表)和Table2(页数表)的员工记录完全对应,可以用JOIN+GROUP BY实现:

SELECT
    t1.Employee,
    -- 计算每小时平均页数,若Duration单位是分钟,需除以60转换为小时,根据实际单位调整
    SUM(t2.Pagecount) / NULLIF(SUM(t1.Duration), 0) AS AvgPagesPerHour
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.Employee = t2.Employee
GROUP BY t1.Employee;

兼容员工记录不全的情况

如果存在员工只有时长记录、或只有页数记录的情况,用FULL OUTER JOIN确保所有员工都被统计:

SELECT
    COALESCE(t1.Employee, t2.Employee) AS Employee,
    -- 无页数时按0计算,无时长时避免除以0
    COALESCE(SUM(t2.Pagecount), 0) / NULLIF(COALESCE(SUM(t1.Duration), 0), 0) AS AvgPagesPerHour
FROM Table1 t1
FULL OUTER JOIN Table2 t2 ON t1.Employee = t2.Employee
GROUP BY COALESCE(t1.Employee, t2.Employee);

关键说明

  • GROUP BY t1.Employee:强制按员工分组,让SUM函数只统计当前员工的总页数和总时长
  • NULLIF(SUM(t1.Duration), 0):避免员工总时长为0时出现除以0的报错
  • COALESCE:处理某表没有该员工记录的情况,确保员工名称和统计值不为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:18:18