In Postgres possiamo usare STRING_AGG()
funzione per trasformare i risultati della nostra query in un elenco separato da virgole.
Invece che ogni valore viene emesso in una riga separata (come con qualsiasi normale query), i valori vengono emessi su una singola riga, separati da una virgola (o da qualche altro delimitatore di nostra scelta).
Esempio
Immagina di eseguire la seguente query:
SELECT *
FROM Genres;
Risultato:
+---------+---------+ | genreid | genre | +---------+---------+ | 1 | Rock | | 2 | Jazz | | 3 | Country | | 4 | Pop | | 5 | Blues | | 6 | Hip Hop | | 7 | Rap | | 8 | Punk | +---------+---------+ (8 rows)
Possiamo eseguire la seguente query per generare il genre
colonna come elenco separato da virgole:
SELECT STRING_AGG(genre, ', ')
FROM Genres;
Risultato:
+-----------------------------------------------------+ | string_agg | +-----------------------------------------------------+ | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | +-----------------------------------------------------+ (1 row)
Possiamo anche includere il GenreId
colonna nel nostro elenco se vogliamo:
SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC)
FROM Genres;
Risultato:
1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk
Qui ho usato anche il ORDER BY
clausola all'interno di STRING_AGG()
funzione per ordinare i risultati per GenreId
in ordine crescente.
Possiamo anche fare cose come rimuovere i duplicati (con il DISTINCT
clausola), utilizzare un separatore diverso e utilizzare la funzione all'interno di una query raggruppata.
Vedi STRING_AGG()
Funzione in PostgreSQL per esempi.