PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Paarweise Array-Summe-Aggregatfunktion?

Allgemeine Lösungen für beliebig viele Arrays mit beliebig vielen Elementen. Auch einzelne Elemente oder das ganze Array können NULL sein:

Einfacher in 9.4+ mit WITH ORDINALITY

SELECT ARRAY (
   SELECT sum(elem)
   FROM  tbl t
       , unnest(t.arr) WITH ORDINALITY x(elem, rn)
   GROUP BY rn
   ORDER BY rn
   );

Siehe:

Postgres 9.3+

Dabei wird ein impliziter LATERAL JOIN verwendet

SELECT ARRAY (
   SELECT sum(arr[rn])
   FROM   tbl t
        , generate_subscripts(t.arr, 1) AS rn
   GROUP  BY rn
   ORDER  BY rn
   );

Siehe:

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
   );

Dasselbe funktioniert in späteren Versionen, aber Set-Returning-Funktionen im SELECT Liste sind kein Standard-SQL und wurden von einigen verpönt. Sollte aber seit Postgres 10 in Ordnung sein. Siehe:

db<>fiddle hier
Altes sqlfiddle

Verwandte: