Как получить среднее значение из вычисляемых столбцов в Postgresql?

#sql #postgresql #sum #average #aggregate-functions

#sql #postgresql #сумма #среднее #агрегатные функции

Вопрос:

У меня есть запрос:

 SELECT sum(column_1),
   sum(...) as sum_1,
   sum(...) as sum_2,
   sum(...) as sum_3
FROM table_1
 

Как получить средние данные из sum_1, sum_2, sum_3?
Если я напишу запрос следующим образом:

 SELECT sum(column_1),
   sum(...) as sum_1,
   sum(...) as sum_2,
   sum(...) as sum_3,
   avg(sum_1, sum_2, sum_3)
FROM table_1
 

Я получил сообщение об ошибке:

[42703] ОШИБКА: столбец «sum_1» не существует

Ответ №1:

Кажется, вы хотите вычислить среднее значение трех столбцов в одной строке. Если это так, вам не нужно avg() (это агрегатная функция, которая работает по строкам). Вместо этого вы можете использовать обычную артиметику:

 SELECT *, (sum_1   sum_2   sum_3) / 3 as sum_average
FROM (
    SELECT sum(column_1), sum(...) as sum_1, sum(...) as sum_2,sum(...) as sum_3
    FROM table_1
) t
 

Подзапрос не является строго необходимым. Вы также можете повторить sum() s, например:

 SELECT sum(column_1), sum(...) as sum_1, sum(...) as sum_2,sum(...) as sum_3,
    (sum(...)   sum(...)   sum(...)) / 3 as sum_average
FROM table_1
 

Комментарии:

1. Большое спасибо. Какой запрос будет быстрее?