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

Come restituire i risultati delle query come un elenco separato da virgole in PostgreSQL

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.