PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja agregująca sumy tablic parami?

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wersje Postgresa nie są kompatybilne

  2. Jak dwukrotnie użyć tej samej listy w klauzuli WHERE?

  3. [Wideo] Wprowadzenie do typów danych JSON w PostgreSQL

  4. Jak rzucić varchar na wartość logiczną

  5. Zwracanie wartości z MyBatis <wstaw> zmapowanych metod