関数
Postgre 関数は、パラメーターとしてテーブル (「複数の行」) を取ることはできません。ドキュメントごと:
引数の型は、ベース、複合、またはドメイン型にするか、テーブル列の型を参照できます。
カーソルまたは一時テーブルを使用して参照によってテーブルを渡します...
SQL
しかし、プレーン SQL でほとんどすべてを解決できます。1 次元配列列のすべての位置の平均を計算するには、次のようにします。
あなたはあなたのバージョンを提供していないので、現在のものを想定しています。WITH ORDINALITYPostgres 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 フィドル。
もっと: