I Postgres kan vi bruge STRING_AGG()
funktion til at omdanne vores forespørgselsresultater til en kommasepareret liste.
I stedet for at hver værdi udskrives i en separat række (som med enhver almindelig forespørgsel), udlæses værdierne til en enkelt række, adskilt af et komma (eller en anden afgrænsning efter vores valg).
Eksempel
Forestil dig, at vi kører følgende forespørgsel:
SELECT *
FROM Genres;
Resultat:
+---------+---------+ | genreid | genre | +---------+---------+ | 1 | Rock | | 2 | Jazz | | 3 | Country | | 4 | Pop | | 5 | Blues | | 6 | Hip Hop | | 7 | Rap | | 8 | Punk | +---------+---------+ (8 rows)
Vi kan køre følgende forespørgsel for at udlæse genre
kolonne som en kommasepareret liste:
SELECT STRING_AGG(genre, ', ')
FROM Genres;
Resultat:
+-----------------------------------------------------+ | string_agg | +-----------------------------------------------------+ | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | +-----------------------------------------------------+ (1 row)
Vi kan endda inkludere GenreId
kolonne på vores liste, hvis vi ønsker:
SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC)
FROM Genres;
Resultat:
1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk
Her brugte jeg også ORDER BY
klausul i STRING_AGG()
funktion for at sortere resultaterne efter GenreId
i stigende rækkefølge.
Vi kan også gøre ting som at fjerne dubletter (med DISTINCT
klausul), brug en anden separator, og brug funktionen i en grupperet forespørgsel.
Se STRING_AGG()
Funktion i PostgreSQL for eksempler.