sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanfoga flera resultatrader i en kolumn till en, gruppera efter en annan kolumn

Enklare med aggregatfunktionen string_agg() (Postgres 9.0 eller senare):

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

1 i GROUP BY 1 är en positionsreferens och en genväg för GROUP BY movie i det här fallet.

string_agg() förväntar sig datatypen text som input. Andra typer måste castas explicit (actor::text ) - om inte en implicit cast till text är definierad - vilket är fallet för alla andra teckentyper (varchar , character , "char" ), och några andra typer.

Som isapir kommenterade kan du lägga till en ORDER BY klausul i det samlade anropet för att få en sorterad lista - om du skulle behöva det. Gilla:

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

Men det är vanligtvis snabbare att sortera rader i en underfråga. Se:

  • Postgres SQL - Skapa array i Select


  1. Överför data från en databas till en annan databas

  2. Använder 'case expression kolumn' i where-satsen

  3. NLS_COLLATION_NAME() Funktion i Oracle

  4. Hur man rensar alla cachade objekt i Oracle