sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo devolver los resultados de la consulta como una lista separada por comas en PostgreSQL

En Postgres, podemos usar STRING_AGG() función para transformar los resultados de nuestra consulta en una lista separada por comas.

En lugar de que cada valor se muestre en una fila separada (como con cualquier consulta regular), los valores se generan en una sola fila, separados por una coma (o algún otro delimitador de nuestra elección).

Ejemplo

Imagina que ejecutamos la siguiente consulta:

SELECT * 
FROM Genres;

Resultado:

+---------+---------+
| genreid |  genre  |
+---------+---------+
|       1 | Rock    |
|       2 | Jazz    |
|       3 | Country |
|       4 | Pop     |
|       5 | Blues   |
|       6 | Hip Hop |
|       7 | Rap     |
|       8 | Punk    |
+---------+---------+
(8 rows)

Podemos ejecutar la siguiente consulta para generar el genre columna como una lista separada por comas:

SELECT STRING_AGG(genre, ', ')
FROM Genres;

Resultado:

+-----------------------------------------------------+
|                     string_agg                      |
+-----------------------------------------------------+
| Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk |
+-----------------------------------------------------+
(1 row)

Incluso podemos incluir el GenreId columna en nuestra lista si queremos:

SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC) 
FROM Genres;

Resultado:

1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk

Aquí, también usé el ORDER BY cláusula dentro de STRING_AGG() función para ordenar los resultados por GenreId en orden ascendente.

También podemos hacer cosas como eliminar duplicados (con DISTINCT cláusula), use un separador diferente y use la función dentro de una consulta agrupada.

Ver STRING_AGG() Función en PostgreSQL para ejemplos.