PostgreSQL查询以逗号分隔列表的形式返回结果

sor*_*rin 80 sql postgresql

假设您有一个SELECT id from table查询(真实案例是一个复杂的查询)确实会返回几个结果.

问题是如何id在一行中获得所有返回,以逗号分隔?

sor*_*rin 173

SELECT string_agg(id, ',') FROM table

需要PostgreSQL 9.0,但这不是问题.

  • 请注意,至少对我来说,string_agg不喜欢为它的第一个参数取一个int,所以我做了类似的事情:`string_agg(CAST(id as varchar),',')`. (44认同)
  • @JZC,甚至更简单:`string_agg(id :: text,',')` (16认同)
  • 如果你想从table`中对列`select string_agg(id,','order by id desc)进行排序 (6认同)

Jes*_*ter 49

您可以使用array()和array_to_string()函数来查询您的查询.随SELECT array( SELECT id FROM table );你将获得如下结果:{1,2,3,4,5,6}

然后,如果你想删除{}符号,你可以使用array_to_string()函数并使用逗号作为分隔符,所以:SELECT array_to_string( array( SELECT id FROM table ), ',' )将获得如下结果:1,2,3,4,5,6

  • ``SELECT array_to_string( id, ',' ) AS id FROM table`` (3认同)

Ant*_*ang 13

您可以使用psql从任何SQL查询生成CSV:

$ psql
> \o myfile.csv
> \f ','  
> \a
> SELECT col1 AS column1, col2 AS column2 ... FROM ...
Run Code Online (Sandbox Code Playgroud)

生成的myfile.csv将SQL结果集列名称作为CSV列标题,查询元组将作为CSV行.

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


小智 5

使用下面的查询它将起作用并给出准确的结果。

SELECT array_to_string(array_agg(id), ',') FROM table
Run Code Online (Sandbox Code Playgroud)

输出:{1,2,3,4,5}