【发布时间】:2016-11-11 21:36:11
【问题描述】:
我需要找出过去十年每月与我们开展业务的所有群体(雇主)的平均规模(平均员工人数)。
所以我可以毫无问题地获得每个月的平均组大小。对于当前月份,我可以使用以下内容:
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
【问题讨论】:
-
我真的希望您不必在 mySQL、oracle 和 SQL Server 中执行此操作……因为每个的日期逻辑不同。此外,一些具有预期结果的样本数据将有助于更好地构建问题。
-
语法查找 mssql
-
离开雇主的员工怎么办?您向我们展示了如何确定它们何时被添加,而不是如何识别它们何时被移除。如果他们离开并且不再在员工表中,那么您将永远无法获得准确的平均值,因为您永远不会计算曾经受雇的员工
-
我和马特在这里。根据目前提供的数据,您根本无法确定一次有多少员工为雇主工作。
-
编辑了我原来的帖子。谢谢!
标签: sql sql-server average