SQL查询总数

时间:2019-05-22 02:05:37

标签: sql

我正在尝试编写一个查询,以计算多个项目的每位员工的平均利润。

我有一张桌子,上面有员工的姓名,他们正在从事的项目以及每天为他们的特定项目带来多少利润。

我的第一个查询提供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)

1 个答案:

答案 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