如何从 Postgresql 中的计算列中获取平均值?

Posted

技术标签:

【中文标题】如何从 Postgresql 中的计算列中获取平均值?【英文标题】:How to get the average from computed columns in Postgresql? 【发布时间】:2021-03-09 06:15:24 【问题描述】:

我有一个问题:

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

【讨论】:

非常感谢。哪个查询会更快?

以上是关于如何从 Postgresql 中的计算列中获取平均值?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动化文件路径以从多个 csv 文件的列中获取平均值?

如何从 postgresql 9.4 中的数组列中选择前几位

如何将新项目附加到 PostgreSQL 中的数组类型列中

SQL查询从postgresql数据库表中具有数组数据类型的列中获取数据。

如何从 postgres JSONB 列中获取值?

熊猫在最高 x 列中的平均值