2012-08-10 20 views
45

Supongamos que tiene una consulta SELECT id from table (el caso real es una consulta compleja) que le devuelve varios resultados.Consulta de PostgreSQL para devolver resultados como una lista separada por comas

El problema es cómo obtener todos id regresar en una sola fila, separados por comas?

+4

posible duplicado de [equivalente Postgresql GROUP_CONCAT?] (Http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska

+0

las anteriores "dupe" era pertinente y útil, especialmente la función 'array_agg()' en particular. –

Respuesta

94

SELECT string_agg(id, ',') FROM table

Requiere PostgreSQL 9.0, pero eso no es un problema.

+0

Encontrado útil ahora. ¡Gracias! – gooddadmike

+23

Tenga en cuenta que, al menos para mí, a string_agg no le gustaba tomar un int para su primer argumento, así que hice algo como: 'string_agg (CAST (id como varchar), ',')' en su lugar. – JZC

+4

@JZC, o incluso más fácil: 'string_agg (id :: text, ',')' – Alphaaa

37

Puede usar las funciones array() y array_to_string() togetter con su consulta. Con SELECT array(SELECT id FROM table); obtendrá un resultado como: {1,2,3,4,5,6}

Entonces, si desea eliminar los signos {}, sólo puede utilizar la función y el uso array_to_string() una coma como separador, por lo que: SELECT array_to_string(array(SELECT id FROM table), ',') obtendrá un resultado como: 1,2,3,4,5,6

+0

'' SELECT array_to_string (id, ',') AS id FROM table'' –

8

Puede generar un archivo CSV desde cualquier consulta SQL usando psql:

$ psql 
> \o myfile.csv 
> \f ',' 
> \a 
> SELECT col1 AS column1, col2 AS column2 ... FROM ... 

El myfile.csv resultante tendrá los nombres de columna de SQL conjunto de resultados como encabezados de columna CSV, y las tuplas de la consulta como filas CSV.

h/t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv

+3

Hola, esto bien podría resolver el problema ... pero estaría bien si pudieras dar una pequeña explicación sobre cómo y por qué funciona :) No lo olvides: hay montones de novatos en el desbordamiento de la pila, y podrían aprender una o dos cosas de tu experiencia: lo que es obvio para ti podría no serlo para ellos. –

+1

Totally @Taryn. Por favor, muestre un ejemplo relevante en lugar de "algún SQL". –

Cuestiones relacionadas