PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como retornar os resultados da consulta como uma lista separada por vírgulas no PostgreSQL


No Postgres, podemos usar o STRING_AGG() função para transformar nossos resultados de consulta em uma lista separada por vírgulas.

Em vez de cada valor ser gerado em uma linha separada (como em qualquer consulta regular), os valores são gerados em uma única linha, separada por uma vírgula (ou algum outro delimitador de nossa escolha).

Exemplo


Imagine que executamos a seguinte 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 executar a seguinte consulta para gerar o genre coluna como uma lista separada por vírgulas:
SELECT STRING_AGG(genre, ', ')
FROM Genres;

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

Podemos até incluir o GenreId coluna em nossa lista se quisermos:
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

Aqui, também usei o ORDER BY cláusula dentro do STRING_AGG() função para classificar os resultados por GenreId em ordem ascendente.

Também podemos fazer coisas como remover duplicatas (com o DISTINCT cláusula), use um separador diferente e use a função em uma consulta agrupada.

Consulte STRING_AGG() Função no PostgreSQL para exemplos.