【问题标题】:SQL query to get Average of sum with group bySQL查询以通过分组获取总和的平均值
【发布时间】:2014-02-04 17:33:31
【问题描述】:

我需要计算平均值。员工每周为一组员工工作的小时数。我拥有的数据是 timeinseconds、empID、Dept. working 和 date working。 像这样的:

PName  EmpID  DeptLoc DeptName TimeinSec  ApplyDate

JRoyce  12345  900    10569    17820      2012-05-10 00:00:00.000   

我有这个查询要按周计算总小时数。但我不知道如何获得平均值。小时按 empid 按周。任何帮助表示赞赏:

select PName, EmpID, DeptLoc, DeptName, Sum(timeinsec/3600.0) as Totalhrs, (Datepart(WK,applydate))
 from EmpTable
Group by PName, EmpID, DeptLoc, DeptName, (Datepart(WK,ApplyDate))
Order by EmpID, WeekNo

它给了我想要的 TotalHrs 结果:

EmpName   EmpID  DeptLoc   DeptID  TotalHrs WeekNo

JRoyce    12345  900       10569   14.9166  27
JRoyce    12345  900       10569   18.0666  28

现在我想按周按 empID 按平均小时数对这些进行分组,以便显示第 27 周、第 28 周等的平均工作小时数。

我尝试使用内部查询,但它给了我所有 TotalHrs 的平均值。

【问题讨论】:

  • Avg hours worked for week 27, week 28 etc 是什么意思?一天的平均工作时间?
  • 谢谢大家。但它给了我每日平均而不是每周。我想看平均值。每周工作小时数。例如。如果一周的每日总小时数为 14.9166 18.0666 14.9166 18.0666 14.9166 则每周平均小时数显示为 16.7666

标签: sql group-by sum average


【解决方案1】:

将总小时数除以一周中的工作天数。请参阅下面的 AvgHours 计算。

select  PName
        , EmpID
        , DeptLoc
        , DeptName
        , Sum(timeinsec/3600.0) as Totalhrs
        , Sum(timeinsec/3600.0) / Count(applydate) as AvgHours
        , (Datepart(WK,applydate))
from EmpTable
Group by 
        PName
        , EmpID
        , DeptLoc
        , DeptName
        , (Datepart(WK,ApplyDate))
Order by 
        EmpID
        , WeekNo

【讨论】:

    【解决方案2】:

    如果您想要每周平均小时数,请从 group by 中删除 empid

    select Datepart(WK,applydate) as weeknum,
           Sum(timeinsec/3600.0) as Totalhrs / count(distinct empid) as avgHrsPerEmployee
    from EmpTable
    Group by Datepart(WK,ApplyDate)
    Order by WeekNum;
    

    平均值是通过将所有时间相加并除以员工人数来确定的。

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT a.PName, a.DeptLoc, a.DeptName, (Datepart(WK,ApplyDate)) [Week], Avg(Totalhrs) as Avghrs
      FROM(
      select PName, EmpID, DeptLoc, DeptName, Sum(timeinsec/3600.0) as Totalhrs, (Datepart(WK,applydate))
       from EmpTable
      Group by PName, EmpID, DeptLoc, DeptName, (Datepart(WK,ApplyDate))
      ) a
      GROUP by a.PName, a.DeptLoc, a.DeptName, (Datepart(WK,ApplyDate))
      

      【讨论】:

      • 嗨 Sev,当我尝试这个子查询时,我得到 Msg 4104, Level 16, State 1, Line 2 无法绑定多部分标识符“Emptable.PNAME”。内部查询工作正常。
      • 做了一些改变。试试看。
      猜你喜欢
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2021-10-25
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多