Consulta PostgreSQL para retornar resultados como uma lista separada por vírgulas


93

Digamos que você tenha uma SELECT id from tableconsulta (o caso real é uma consulta complexa) que retorna vários resultados.

O problema é como obter todos os idretornos em uma única linha, separados por vírgulas?



O "truque" acima foi relevante e útil, especialmente a array_agg()função em particular.
Jay Taylor

Respostas:


205

SELECT string_agg(id::text, ',') FROM table

Requer PostgreSQL 9.0, mas isso não é um problema.


Achei isso útil agora. Obrigado!
gooddadmike

47
Observe que, pelo menos para mim, string_agg não gostou de tomar um int como seu primeiro argumento, então fiz algo como: em string_agg(CAST(id as varchar), ',')vez disso.
JZC

17
@JZC, ou ainda mais fácil:string_agg(id::text, ',')
Alphaaa de

6
Se você quiser classificar a colunaselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
Encontrei duplicatas com minha consulta, mas resolvi comSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

51

Você pode usar o conjunto de funções array () e array_to_string () com sua consulta. ComSELECT array( SELECT id FROM table ); você obterá um resultado como: {1,2,3,4,5,6}

Então, se você deseja remover os sinais {}, você pode apenas usar a função array_to_string () e usar a vírgula como separador, então: SELECT array_to_string( array( SELECT id FROM table ), ',' )obterá um resultado como: 1,2,3,4,5,6


1
SELECT array_to_string( id, ',' ) AS id FROM table
Alex R.


0

use a função array_to_string () & array () para o mesmo.

select array_to_string(array(select column_name from table_name where id=5), ', ');

Como isso é melhor do que usar string_agg()?
a_horse_with_no_name

-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

Estou usando o Postgres 11 e EntityFramework o está buscando como uma matriz de inteiros.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.