SQL Server平均计数

时间:2018-09-13 19:42:01

标签: sql-server tsql

表包含

 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个其他列。我不想按所有人分组。

2 个答案:

答案 0 :(得分:1)

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

;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

答案 1 :(得分:0)

使用派生表或CTE分层查询:

Outer query that adds the 50+ columns
  FROM {Query that groups by State (only) and gets Average of Counts}
    FROM {Query that groups by State & Location and gets Count of JobNumbers}