Query PostgreSQL per restituire i risultati come un elenco separato da virgole


93

Supponiamo che tu abbia una SELECT id from tablequery (il caso reale è una query complessa) che restituisce diversi risultati.

Il problema è come ottenere tutti i risultati idin una singola riga, separati da virgole?



Il "dupe" di cui sopra era pertinente e utile, soprattutto la array_agg()funzione in particolare.
Jay Taylor

Risposte:


205

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

Richiede PostgreSQL 9.0 ma non è un problema.


L'ho trovato utile solo ora. Grazie!
gooddadmike

47
Nota che almeno per me, string_agg non amava prendere un int per il suo primo argomento, quindi ho fatto qualcosa del tipo: string_agg(CAST(id as varchar), ',')invece.
JZC

17
@JZC, o anche più facile:string_agg(id::text, ',')
Alphaaa

6
Se si desidera ordinare la colonnaselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
Mi sono imbattuto in duplicati con la mia domanda ma l'ho risolto conSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

51

Puoi usare le funzioni array () e array_to_string () per accompagnare la tua query. Con SELECT array( SELECT id FROM table );otterrai un risultato del tipo: {1,2,3,4,5,6}

Quindi, se desideri rimuovere i segni {}, puoi semplicemente usare la funzione array_to_string () e usare la virgola come separatore, quindi: SELECT array_to_string( array( SELECT id FROM table ), ',' )otterrai un risultato come: 1,2,3,4,5,6


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


0

usa la funzione array_to_string () e array () per lo stesso.

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

Come è meglio che usare string_agg()?
a_horse_with_no_name

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

{1,2,3,4}

Sto usando Postgres 11 e EntityFramework lo sta recuperando come array di numeri interi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.