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

Połącz wiele wierszy wyników z jednej kolumny w jedną, pogrupuj według innej kolumny

Prostsze dzięki funkcji agregującej string_agg() (Postgres 9.0 lub nowszy):

SELECT movie, string_agg(actor, ', ') AS actor_list
FROM   tbl
GROUP  BY 1;

1 w GROUP BY 1 jest odniesieniem pozycyjnym i skrótem do filmu GROUP BY movie w tym przypadku.

string_agg() oczekuje typu danych text jako wejście. Inne typy muszą być rzucane jawnie (actor::text ) — chyba, że niejawne rzutowanie na text jest zdefiniowany - co ma miejsce w przypadku wszystkich innych typów znaków (varchar , character , "char" ) i kilka innych typów.

Jak skomentował isapir, możesz dodać ORDER BY klauzula w wywołaniu agregującym, aby uzyskać posortowaną listę - jeśli tego potrzebujesz. Na przykład:

SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM   tbl
GROUP  BY 1;

Ale zazwyczaj szybsze jest sortowanie wierszy w podzapytaniu. Zobacz:

  • Postgres SQL - Utwórz tablicę w Select


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepszy sposób na zainstalowanie hstore na wielu schematach w bazie danych Postgres?

  2. Jak zainstalować tylko narzędzia klienckie dla PostgreSQL w systemie Windows?

  3. Jak działa justify_days() w PostgreSQL

  4. Skrypt powłoki do wykonywania poleceń pgsql w plikach

  5. Limit rozmiaru typu danych JSON w PostgreSQL