Группировка по столбцам + COUNT (*), как получить среднее количество для каждой комбинации? - PullRequest
4 голосов
/ 06 августа 2011

У меня следующий (упрощенный) запрос:

SELECT     ResolvedBy, COUNT(*) AS Count, fiCategory, fiSubCategory, fiSymptom
FROM         tContact
WHERE     (ResolvedBy IS NOT NULL)
GROUP BY ResolvedBy, fiCategory, fiSubCategory, fiSymptom
ORDER BY Count DESC

Теперь мне нужно среднее количество для каждой комбинации fiCategory, fiSubCategory, fiSymptom в качестве столбца. Как это сделать?

Например:

ResolvedBy    Count    fiCategory    fiSubCategory    fiSymptom    Average
    1           50         1              2             3            40
    2           30         1              2             3            40
    3           40         1              2             3            40
    1           20         2              3             4            30
    2           40         2              3             4            30

В примере представлены две комбинации fiCategory, fiSubCategory и fiSymptom: 1,2,3 и 2,3,4. Следовательно, есть два средних значения, которые рассчитываются:

  1. 50 + 30 + 40/3 = 40
  2. 20 + 40/2 = 30.

Итак, я хочу подсчитать количество каждой комбинации и поделить на количество случаев.

Редактировать : Пример представляет собой извлечение желаемого результата запроса. Количество является суммой всех случаев этой комбинации для каждого ResolvedBy.

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 06 августа 2011
Select ResolvedBy, [Count], fiCategory, fiSubCategory, fiSymptom
    , Avg(Z.Count) Over( Partition By fiCategory, fiSubCategory, fiSymptom ) As AvgByGrp
From    (
        Select ResolvedBy, Count(*) As [Count], fiCategory, fiSubCategory, fiSymptom
        From tContact 
        Group By ResolvedBy, fiCategory, fiSubCategory, fiSymptom
        ) As Z

Order By Z.Count Desc
2 голосов
/ 06 августа 2011

Попробуйте это:

SELECT main.ResolvedBy, COUNT(*) AS Count, 
    main.fiCategory, main.fiSubCategory, main.fiSymptom, average
FROM tContact main
JOIN (SELECT COUNT(*)/count(distinct ResolvedBy) as average,
      fiCategory, fiSubCategory, fiSymptom group by 2,3,4) x
        on x.fiCategory = main.fiCategory
        and x.fiSubCategory = main.fiSubCategory
        and x.fiSymptom = main.fiSymptom
WHERE main.ResolvedBy IS NOT NULL
GROUP BY 1, 3, 4, 5
ORDER BY 2 DESC
...