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.