#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. Большое спасибо. Какой запрос будет быстрее?