0

Попытка получить среднее значение из результирующего набора с подсчетом

21

Я пытаюсь решить следующую задачу в SQL (для базы данных DB2):

У меня есть следующий запрос:

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 и использую его функцию среднего.

Однако в DB2 есть функция AVG, и я хочу её использовать. Я пробовал следующие запросы:

SELECT AVG(COUNT(*))

и

SELECT AVG(*) FROM (theQuery)

Но ни один из этих подходов не сработал. Как правильно использовать функцию AVG для получения среднего из результата моего запроса? Спасибо!

1 ответ(ов)

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))

Оба варианта выполняют схожую задачу, однако во втором случае мы рассчитываем среднее значение непосредственно, деля общее количество строк на количество уникальных группировок, что может быть более производительно. Выбор метода зависит от ваших конкретных требований и объема данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь