代码之家  ›  专栏  ›  技术社区  ›  shorton

SQL Server平均计数

  •  0
  • shorton  · 技术社区  · 6 年前

    表包含

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

    我需要查询该州工作岗位的平均数量。换句话说,对于每个州,我需要知道每个地方的平均就业人数。

    因此,如果有100个阿拉斯加位置有3个jobnumber,100个阿拉斯加位置有1个jobnumber,那么所有阿拉斯加行的结果都是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 回复  |  直到 6 年前
        1
  •  1
  •   Zohar Peled    6 年前

    一种方法是使用公共表表达式为 count over 避免使用 group by ,然后用 avg ,再次与 结束 像这样的事情应该可以做到:

    ;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
    
        2
  •  0
  •   Tab Alleman    6 年前

    使用派生表或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}