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

假设您有一个 SELECT id from table查询(实际情况是一个复杂的查询) ,它会返回几个结果。

问题是如何得到所有的 id返回在一个单一的行,逗号分隔?

136339 次浏览

可以将 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 string_agg(id::text, ',') FROM table

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

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

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

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

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

使用 array _ to _ string () & array ()函数。

select array_to_string(array(select column_name from table_name where id=5), ', ');
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

我正在使用 Postgres 11,而 EntityFramework 正在以整数数组的形式获取它。

使用下面的查询,它将工作,并给出确切的结果。

SELECT array_to_string(array_agg(id), ',') FROM table

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