我正在尝试编写一个查询,以计算多个项目的每位员工的平均利润。
我有一张桌子,上面有员工的姓名,他们正在从事的项目以及每天为他们的特定项目带来多少利润。
我的第一个查询提供3个字段-项目名称,员工为项目带来的所有利润的总和以及项目中的员工人数。
我的第二个查询,我试图显示2个字段-项目名称和每个项目产生的每名员工的平均利润
SELECT SAYSquery.ProjectName, SUM(SAYSquery.Profit) AS SumOfProfit, Count(SAYSquery.[EmpFirstName]) AS NumberOfEmps
FROM SAYSquery
WHERE profit > 0
GROUP BY SAYSquery.ProjectName;
SELECT SAYSqueryNIPE.[ProjectName], SAYSqueryNIPE.[SumOfProfit]/[NumberOfEmps] AS total
FROM SAYSqueryNIPE
GROUP BY SAYSqueryNIPE.[ProjectName], SAYSqueryNIPE.[SumOfProfit]/[NumberOfEmps];
不幸的是,我的第二个查询是给我每个项目相同的平均利润,我不确定为什么。任何帮助将不胜感激。
编辑:
查询1读取:
**Employee Name | Sell Rate | Renumeration | Profit (Sell-Renumeration) | Project Name**
查询2读取:
**PROJECT NAME | SumofProfit | NumberofEmployees**
Project X | $1500 | 3 employees
查询3读取:
**PROJECT NAME | TOTAL**
Project X | $500 (Average profit per employee)
答案 0 :(得分:0)
问题出在您的第一个查询中,您在其中计算员工人数。正如问题中所写,您返回的是行数,而不是在项目上工作的员工。您需要使用count distinct
。我也建议不要指望EmpFirstName
。如果您有多个同名员工,查询将不会为您提供正确的结果。最好使用唯一的员工标识符代替他们的名字。
SELECT SAYSquery.ProjectName, SUM(SAYSquery.Profit) AS SumOfProfit,
Count(distinct SAYSquery.[EmpFirstName]) AS NumberOfEmps
FROM SAYSquery
WHERE profit > 0
GROUP BY SAYSquery.ProjectName
您可以将整个内容包装成一个查询,而不是问题中所述的两个或三个。
SELECT SAYSquery.ProjectName, SUM(SAYSquery.Profit)/Count(distinct SAYSquery.[EmpFirstName]) AS AvgProfitPerEmployee
FROM SAYSquery
WHERE profit > 0
GROUP BY SAYSquery.ProjectName