SQL查询以获取与group by的总和的平均值
我需要计算员工群体每周平均工作小时数。我拥有的数据是TimeInsectonds、empID、工作部门和工作日期。 大概是这样的:SQL查询以获取与group by的总和的平均值,sql,group-by,sum,average,Sql,Group By,Sum,Average,我需要计算员工群体每周平均工作小时数。我拥有的数据是TimeInsectonds、empID、工作部门和工作日期。 大概是这样的: PName EmpID DeptLoc DeptName TimeinSec ApplyDate JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000 我要查询每周的总小时数。但我不知道如何获得每周empid的平均小时数。感谢您的帮助: PName EmpID Dept
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
我要查询每周的总小时数。但我不知道如何获得每周empid的平均小时数。感谢您的帮助:
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
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所需的结果:
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
EmpName EmpID DeptLoc DeptID TotalHrs WeekNo
JRoyce 12345 900 10569 14.9166 27
JRoyce 12345 900 10569 18.0666 28
现在我想按empID按周按平均小时数对这些进行分组,以便显示第27周、第28周等的平均工作小时数
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
我尝试使用innerquery,但它给出了所有TotalHrs的平均值 将总小时数除以一周的工作天数。请参见下文中的AvgHours计算
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
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
试试这个:
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
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))
如果需要每周平均小时数,请从
组中删除empid
:
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000
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;
平均值是通过将所有时间相加并除以员工人数来确定的。您所说的第27周、第28周等的平均工作时数是什么意思?平均每天工作小时数?谢谢大家。但它给我的是每日平均值,而不是每周平均值。我想看看每周平均工作时间。例如,如果一周的每日总小时数为14.9166 18.0666 14.9166 18.0666 14.9166,则周平均小时数显示为16.7666Hi Sev,当我尝试此子查询时,我得到Msg 4104,级别16,状态1,第2行,无法绑定多部分标识符“Emptable.PNAME”。内部查询工作正常。进行了一些更改。试试看。
PName EmpID DeptLoc DeptName TimeinSec ApplyDate
JRoyce 12345 900 10569 17820 2012-05-10 00:00:00.000