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.