sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenkæd flere resultatrækker i én kolonne til én, grupper efter en anden kolonne

Enklere med aggregatfunktionen string_agg() (Postgres 9.0 eller nyere):

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

1 i GROUP BY 1 er en positionsreference og en genvej til GROUP BY movie i dette tilfælde.

string_agg() forventer datatypen text som input. Andre typer skal castes eksplicit (actor::text ) - medmindre en implicit cast til text er defineret - hvilket er tilfældet for alle andre tegntyper (varchar , character , "char" ), og nogle andre typer.

Som isapir kommenterede, kan du tilføje en ORDER BY klausul i det samlede opkald for at få en sorteret liste - hvis du skulle få brug for det. Ligesom:

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

Men det er typisk hurtigere at sortere rækker i en underforespørgsel. Se:

  • Postgres SQL - Opret array i Select


  1. Hvordan kan jeg komme uden om MySQL Errcode 13 med SELECT INTO OUTFILE?

  2. Introduktion til Multi-Statement Table-Valued Functions (MSTVF) i SQL Server

  3. Sådan viser du de aktuelle Dot-kommandoindstillinger i SQLite

  4. Transponer rækker og kolonner uden aggregat