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

 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 других столбцов. Я не хочу группировать по всем.

0
shorton 13 Сен 2018 в 22:42

2 ответа

Лучший ответ

Один из подходов заключается в использовании общего табличного выражения для добавления столбца для count, используя предложение over, чтобы избежать необходимости в group by, а затем выбирать из этого элемента с помощью {{X3 }}, снова с предложением 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
Zohar Peled 13 Сен 2018 в 19:54

Разложите запросы либо производными таблицами, либо 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
Tab Alleman 13 Сен 2018 в 19:55