sql >> Database >  >> RDS >> PostgreSQL

Voeg meerdere resultaatrijen van één kolom samen tot één, groepeer op een andere kolom

Eenvoudiger met de aggregatiefunctie string_agg() (Postgres 9.0 of hoger):

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

De 1 in GROUP BY 1 is een positionele referentie en een snelkoppeling voor GROUP BY movie in dit geval.

string_agg() verwacht gegevenstype text als invoer. Andere typen moeten expliciet worden gecast (actor::text ) - tenzij een impliciete cast naar text is gedefinieerd - wat het geval is voor alle andere tekentypes (varchar , character , "char" ), en enkele andere soorten.

Zoals isapir opmerkte, kun je een ORDER BY . toevoegen clausule in de geaggregeerde oproep om een ​​gesorteerde lijst te krijgen - mocht u dat nodig hebben. Vind ik leuk:

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

Maar het is doorgaans sneller om rijen in een subquery te sorteren. Zie:

  • Postgres SQL - Array maken in Select


  1. Documenten uploaden naar Azure Data Lake en gegevens exporteren met SSIS

  2. Cross Domain SQL Server-aanmeldingen met Windows-verificatie

  3. Meet databaseprestaties onder druk

  4. Wat is het verschil tussen MyISAM en InnoDB?