一般的なソリューション 任意の数の要素を持つ任意の数の配列に対して。個々の要素または配列全体をNULLにすることもできます:
WITH ORDINALITY
を使用した9.4以降のシンプル
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
参照:
Postgres 9.3+
これは、暗黙の LATERAL JOIN
を利用します。
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
参照:
Postgres 9.1
SELECT ARRAY (
SELECT sum(arr[rn])
FROM (
SELECT arr, generate_subscripts(arr, 1) AS rn
FROM tbl t
) sub
GROUP BY rn
ORDER BY rn
);
同じことがそれ以降のバージョンでも機能しますが、 SELECT
のset-returning関数 リスト 標準のSQLではなく、一部の人に嫌われていました。ただし、Postgres10以降は問題ないはずです。参照:
db <> fiddle こちら
古い
関連: