sql >> Databasteknik >  >> RDS >> PostgreSQL

Parvis array summa aggregerad funktion?

Allmänna lösningar för valfritt antal arrayer med valfritt antal element. Enskilda element eller hela arrayen kan också vara NULL:

Enklare i 9.4+ med WITH ORDINALITY

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

Se:

Postgres 9.3+

Detta använder en implicit LATERAL JOIN

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

Se:

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

Detsamma fungerar i senare versioner, men ställ in återvändande funktioner i SELECT lista är inte standard SQL och blev ogillade av vissa. Borde vara OK sedan Postgres 10, dock. Se:

db<>fiol här
Gammal sqlfiddle

Relaterat:



  1. Hur man använder Pandas Write_Frame för att exportera resultat till Oracle Database i cx_Oracle

  2. Hur ställer man in tidszon för Postgres psql?

  3. Hur man buntar cx_oracle med Pyinstaller

  4. Vilken är snabbare en enda stor fråga eller få små frågor?