sql - 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)
解决方案
问题出在您计算员工人数的第一个查询中。如问题中所述,您返回的是行数,而不是参与该项目的员工。你需要使用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
推荐阅读
- javascript - 如何将 CSP 与 pdf.js 一起使用?我对工人有意见
- http - Liveness 和 Readiness 探针连接被拒绝
- gpu - Google Compute Engine - GPU 似乎不可用
- r - 创建具有 n 个字母序列的函数
- javascript - 在 Javascript 中,我将如何连接到 docker 内的 MySQL 数据库?
- node.js - NodeJS 和 Shellscript 之间最好的共享配置是什么?
- c++ - 我应该如何使用别人在 GitHub 上发布的代码?
- javascript - 我需要诊断我的代码问题,在尝试运行我编写的不和谐通知程序时遇到错误
- javascript - 在 Phaser 3.24.1 游戏中使用 Axios 库
- javascript - 为脚本构建 URL 以移动 PTZ 摄像机的问题