Rozwiązania ogólne dla dowolnej liczby tablic z dowolną liczbą elementów. Poszczególne elementy lub cała tablica również mogą mieć wartość NULL:
Prostsze w wersji 9.4+ przy użyciu WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Zobacz:
Postgres 9.3+
Wykorzystuje to niejawne LATERAL JOIN
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Zobacz:
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
);
To samo działa w późniejszych wersjach, ale zestaw funkcji zwracających w SELECT
lista nie są standardowymi językami SQL i przez niektórych spotkały się z dezaprobatą. Powinno być w porządku od Postgresa 10. Zobacz:
db<>fiddle tutaj
Stary sqlfiddle
Powiązane: