sql >> Databáze >  >> RDS >> PostgreSQL

Spojte více řádků v poli pomocí SQL na PostgreSQL

Toto je vestavěný Postgres od několika verzí, takže už nemusíte definovat vlastní, název je array_agg() .

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(toto je Postgres 8.4.8).

Všimněte si, že žádné ORDER BY je zadáno, takže pořadí výsledných řádků závisí na použité metodě seskupování (zde hash), tj. není definováno. Příklad:

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

Teď nevím, proč dostáváte {10,2,4,6,8} a {9,7,3,1,5} , protože generate_series() by měl odeslat řádky v pořadí.



  1. Maskování dat v reálném čase pomocí spouštěčů

  2. Nasazení MySQL, MariaDB, Percona Server, MongoDB nebo PostgreSQL – snadné s ClusterControl

  3. Načte návratové hodnoty pole pl/sql v jazyce Java

  4. Vkládání národních znaků do sloupce Oracle NCHAR nebo NVARCHAR nefunguje