Среднее количество SQL Server - PullRequest
       5

Среднее количество SQL Server

0 голосов
/ 13 сентября 2018

Таблица содержит

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

Мне нужно запросить среднее количество номеров_работ в местоположениях штата.Другими словами, для каждого штата мне нужно знать среднее количество рабочих мест в каждом местоположении.

Так что, если в 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 голосов
/ 13 сентября 2018

Слои запросов с производными таблицами или 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}
0 голосов
/ 13 сентября 2018

Один из подходов состоит в том, чтобы использовать общее табличное выражение для добавления столбца для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...