Попытка получить среднее значение набора результатов подсчета

У меня есть следующий SQL: (bitemp)

SELECT COUNT (*) AS Count
  FROM Table T
 WHERE (T.Update_time =
           (SELECT MAX (B.Update_time )
              FROM Table B
             WHERE (B.Id = T.Id))
GROUP BY T.Grouping

теперь я получаю набор результатов с большим количеством чисел. Я хочу получить среднее значение в этом списке. На данный момент я импортирую список в Excel и использую его функцию усреднения. Но есть функция AVG для DB2, но у меня она не заработала.

Я пробовал SELECT AVG(COUNT(*)), а также SELECT AVG(*) FROM (theQuery).


person Xavjer    schedule 12.10.2011    source источник
comment
Вопрос довольно старый и решенный, с моей точки зрения, нет необходимости в каких-либо образцах.   -  person Xavjer    schedule 25.07.2017


Ответы (1)


Вы просто можете поместить свой запрос в виде подзапроса:

SELECT avg(count)
  FROM 
    (
    SELECT COUNT (*) AS Count
      FROM Table T
     WHERE T.Update_time =
               (SELECT MAX (B.Update_time )
                  FROM Table B
                 WHERE (B.Id = T.Id))
    GROUP BY T.Grouping
    ) as counts

Изменить: я думаю, это должно быть то же самое:

SELECT count(*) / count(distinct T.Grouping)
  FROM Table T
 WHERE T.Update_time =
           (SELECT MAX (B.Update_time)
              FROM Table B
             WHERE (B.Id = T.Id))
person DavidEG    schedule 12.10.2011
comment
Я думаю, что это дает мне среднее значение каждого результата, который является одним (потому что он сгруппирован), но я хочу получить среднее значение счетчика, поэтому, если я получаю 2,4,6, среднее значение будет 4, но я получаю 1 (потому что каждого только по одному) - person Xavjer; 12.10.2011
comment
Если счетчики подзапроса вернут 2,4,6, тогда avg по этому подзапросу вернет 4. Не могли бы вы опубликовать в своем вопросе результат SELECT * FROM Table T WHERE T.Update_time = (...)? Это может быть полезно, чтобы вам помочь. - person DavidEG; 12.10.2011
comment
Что ж, я нашел решение своей проблемы благодаря вашему примеру подзапроса. Я использую его следующим образом: SELECT CAST (sum (Count) AS FLOAT) / CAST (COUNT (Count) AS FLOAT) ... это работает по желанию, спасибо;) (однако я не знаю, почему avg возвращает 1, даже при использовании как float. результат 1.91 ... - person Xavjer; 12.10.2011
comment
Хорошо, нашел идеальное решение, используя SELECT AVG(CAST(COUNT AS FLOAT)) - person Xavjer; 12.10.2011