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

Połącz wiele wierszy w tablicy za pomocą SQL na PostgreSQL

Jest to wbudowane w Postgres od kilku wersji, więc nie musisz już definiować własnej, nazwa to 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}

(to jest Postgres 8.4.8).

Zwróć uwagę, że nie ORDER BY jest określony, więc kolejność wierszy wynikowych zależy od użytej metody grupowania (tutaj hash), tj. nie jest zdefiniowana. Przykład:

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}

Teraz nie wiem, dlaczego dostajesz {10,2,4,6,8} i {9,7,3,1,5} , ponieważ generate_series() powinien wysłać wiersze w kolejności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Schemat tworzenia PostgreSQL

  2. Zarządzanie rolami i atrybutami ról w PostgreSQL

  3. Wstaw, jeśli nie istnieje, w przeciwnym razie zwróć identyfikator w postgresql

  4. PostgreSQL błędna konwersja ze znacznika czasu bez strefy czasowej na znacznik czasu ze strefą czasową

  5. Jak sprawdzić, czy w danym schemacie istnieje tabela?