功能
Postgres 函数不能将表(“多行”)作为参数。根据文档:
参数类型可以是基类型、复合类型或域类型,也可以引用表列的类型。
您将使用游标或临时表通过引用传递表...
SQL
但是你可以用简单的 SQL 解决大多数问题。要计算一维数组列中每个位置的平均值:
您没有提供您的版本,所以我假设是当前版本。WITH ORDINALITY
需要 Postgres 9.4:
SELECT ARRAY (
SELECT avg(elem) AS avg_elem
FROM tbl t
, unnest (t.num_array) WITH ORDINALITY a(elem, rn)
GROUP BY a.rn
ORDER BY a.rn
) AS arr_avg;
基本上:
- 在连接中取消嵌套每个数组
LATERAL
(此处为隐式),记住元素的序数位置
GROUP BY
这个位置。
- 构造一个按此位置排序的结果数组。
旧版本中没有那么优雅的替代品。对于 Postgres 9.3:
SELECT ARRAY (
SELECT avg(t.num_array[i]) AS avg_elem
FROM tbl t, generate_subscripts(t.num_array, 1) i
GROUP BY i
ORDER BY i
) AS arr_avg;
SQL小提琴。
更多的: