首页 > 解决方案 > SQL Server 平均计数

问题描述

表包含

 state,
 location,
 job_number,
 (and many more columns)

我需要查询该州位置的 job_numbers 的平均计数。换句话说,对于每个州,我需要知道每个位置的平均工作数量。

因此,如果有 100 个具有 3 个工作编号的阿拉斯加位置和 100 个具有 1 个工作编号的阿拉斯加位置,则所有阿拉斯加行的结果将为 2。(100*3 + 100*1)/200。

寻找每个州每个位置的平均工作数量

期望的结果

State   Location  JobNumber AvgJobsPerLocInState
Alaska  Loc1      Job1       2
Alaska  Loc1      Job2       2
Alaska  Loc2      Job3       2
Alaska  Loc2      Job4       2
Ohio    Loc3      Job5       1

无法弄清楚该怎么做。更复杂的是,我的最终查询中有大约 50 个其他列。我不想按所有人分组。

标签: sql-servertsql

解决方案


一种方法是使用公用表表达式添加列 for count,使用over子句避免需要 a group by,然后使用avg, 再次使用over子句从该 cte 中选择。这样的事情应该可以解决问题:

;WITH CTE AS
(
    SELECT State 
          ,Location
          ,JobNumber -- and all the other columns
          ,COUNT(JobNumber) OVER(PARTITION BY State, Location) As CountOfJobsPerLocation
    FROM -- rest of the query here
)

SELECT  State 
       ,Location
       ,JobNumber -- and all the other columns
       ,AVG(CountOfJobsPerLocation) OVER(PARTITION BY State) As AvgJobsPerLocInState
FROM CTE

推荐阅读