SQL - 如何计算每个项目的平均目标率

SQL - How to Calculate Average TargetRate for each project

对于这可能是一个基本问题提前致歉。我有一个包含项目的数据库,这些项目下面有阶段。

每个阶段都有一个我们希望实现的目标小时费率(这是在名为 TargetRate 的字段中输入的条目)。目标利率可以相同也可以不同,每个阶段都有一个。我正在尝试获取特定项目的平均目标费率。

数据集:

ProjectID PhaseID ProjectKey TargetRate (Comment)
12345 500 500 150 (Project)
12345 501 500 140 (Phase 1)
12345 502 500 155 (Phase 2)
12345 503 500 150 (Phase 3)
67890 100 100 200 (another project)
67890 101 100 205 (Phase 1 of the other project)

我写了一个简单的查询

SELECT AVG(prj_TargetRate) 
FROM Projects

而且似乎 return 所有项目的所有目标率的平均值。我正在寻找单个项目的平均费率。

因此,对于上面 table 中的项目 12345,它应该 return 148.75。我如何让公式只计算相同项目 ID 的那些行?

你快到了。只需添加 group by 子句即可。

select ProjectId, avg(prj_TargetRate) FROM Projects
group by ProjectId

列名是prj_TargetRate吗?或者它将是:

select ProjectId, avg(TargetRate) FROM Projects
group by ProjectId

DB-Fiddle:

架构和插入语句:

 Create table Projects(ProjectID int, PhaseID int, ProjectKey int, TargetRate int, Comment varchar(50));

 insert into Projects values(12345, 500,    500,    150,    'Project');
 insert into Projects values(12345, 501,    500,    140,    'Phase 1');
 insert into Projects values(12345, 502,    500,    155,    'Phase 2');
 insert into Projects values(12345, 503,    500,    150,    'Phase 3');
 insert into Projects values(67890, 100,    100,    200,    'another project');
 insert into Projects values(67890, 101,    100,    205,    'Phase 1 of the other project');

查询:

 select ProjectId, avg(TargetRate)Average_TargetRate FROM Projects
 group by ProjectId

输出:

ProjectId Average_TargetRate
12345 148
67890 202

db<>fiddle here

您可以在选择 AVG(TargetRate) 的同时 GROUP BY ProjectID 字段。

SELECT 
  ProjectId,
  AVG(TargetRate)AverageTargetRate,
FROM Projects
GROUP BY ProjectId;