我需要找到过去十年中我们每月开展业务的所有团体(雇主)的平均规模(平均雇员人数)。
所以我每个月获得平均组数没问题。对于本月,我可以使用以下内容:
Select count(*)
from Employees EE
join Employers ER on EE.employerid = ER.employerid
group by ER.EmployerName
这将为我提供每个组中有多少员工的列表。然后我可以将列复制并粘贴到excel中,获取当前月份的平均值。
在上个月,我想要排除在该月之后添加的所有员工。我对此也有疑问:
Select count(*)
from Employees EE
join Employers ER on EE.employerid = ER.employerid
where EE.dateadded <= DATEADD(month, -1,GETDATE())
group by ER.EmployerName
这将排除本月添加的所有员工。我可以在十年后继续这样做,但我知道有更好的方法可以做到这一点。运行此查询120次没有问题,将结果复制并粘贴到Excel中以计算平均值。但是,我宁愿学习更有效的方法来做到这一点。
另一个问题,我不能做到以下几点,任何人都知道解决方法:
Select avg(count(*))
先谢谢你们!!
编辑:已经终止的员工可以像这样找到。 NULL是当前雇用的员工。
Select count(*)
from Employees EE
join Employers ER on EE.employerid = ER.employerid
join Gen_Info gne on gne.id = EE.newuserid
where EE.dateadded <= DATEADD(month, -1,GETDATE())
and (gne.TerminationDate is NULL OR gen.TerminationDate < DATEADD(day, -14,GETDATE())
group by ER.EmployerName
答案 0 :(得分:0)
您是否在查询后显示按年份和月份添加的计数?如果是这样,这似乎很简单。
这是使用mySQL日期函数Year&amp;一个月。
Select AVG(cnt) FROM (
Select count(*) cnt, Year(dateAdded), Month(dateAdded)
from System_Users su
join system_Employers se on se.employerid = su.employerid
group by Year(dateAdded), Month(dateAdded)) B
内部查询按年份和月份计算并计算计数我们然后将其包装在查询中以显示平均值。
- 第二次尝试,但我是脑子FriDay出去了。
这使用公用表表达式(CTE)为员工的年份,月份计算一组数据,然后按月平均计算。 如果这不是您所追求的,那么样本数据与预期结果将有助于更好地构建问题,我可以对您需要/想要的内容做出假设。
With CTE AS (
Select Year(dateAdded) YR , Month(DateAdded) MO, count(*) over (partition by Year(dateAdded), Month(dateAdded) order by DateAdded Asc) as RunningTotal
from System_Users su
join system_Employers se on se.employerid = su.employerid
Order by YR ASC, MO ASC)
Select avg(RunningTotal), mo from cte;