sql >> Database >  >> RDS >> PostgreSQL

Paarsgewijze matrixsom-aggregatiefunctie?

Algemene oplossingen voor een willekeurig aantal arrays met een willekeurig aantal elementen. Individuele elementen of de hele array kunnen ook NULL zijn:

Eenvoudiger in 9.4+ met WITH ORDINALITY

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

Zie:

Postgres 9.3+

Dit maakt gebruik van een impliciete LATERAL JOIN

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

Zie:

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

Hetzelfde werkt in latere versies, maar set-returning functies in de SELECT lijst zijn geen standaard SQL en werden door sommigen afgekeurd. Zou echter goed moeten zijn sinds Postgres 10. Zie:

db<>fiddle hier
Oude sqlfiddle

Gerelateerd:



  1. Oracle SQL Developer:Test mislukt:de netwerkadapter kon de verbinding niet tot stand brengen?

  2. MySQL 5.6 EOL-aankondiging

  3. MySQL Update eerste exemplaar van een record

  4. Lat/lon-tekstkolommen verplaatsen naar een kolom van het 'punt'-type