如何用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
相关产品推荐
相关产品推荐

