获取值列表作为数组

时间:2015-08-10 08:45:11

标签: sql arrays postgresql aggregate-functions

我有这个问题:

SELECT id FROM a

id的类型为integer

我希望将结果作为整数数组:[26053,26021],将此结果返回给迭代元素的函数。

根据我在手册中阅读的内容,我写了这个查询:

select array_to_string( array( SELECT id FROM a where ... ), ',' ) 

问题是它返回一个字符串26053,26021,当我迭代它的结果时:

    ... (id =2 or id =6 or id =0 or id =5 or id =3 or id =,
         or id =2 or id =6 or id =0 or id =2 or id =1)

正如您所看到的,它将结果视为字符串而非数组,每个字符都是一个元素。

我如何获得一个阵列?是将字符串转换回数组的唯一解决方案吗?有没有办法直接转换它?

1 个答案:

答案 0 :(得分:2)

对于单个结果行的简单情况,array constructor最好(最简单,最快)。你实际上已经拥有它,只需删除array_to_string(),它将数组转换为字符串(顾名思义):

SELECT ARRAY(SELECT id FROM a WHERE ... ) AS id_arr;

对于具有多个结果行的情况,请查看聚合函数array_agg()。例如:

SELECT b, array_agg(id) AS id_arr
FROM   a
WHERE  ...
GROUP  BY b;

除了:
数组常量(数组的文本表示)的标准Postgres语法是'{26053,26021}' - 带花括号和单引号。根据上下文,您可能需要也可能不需要添加显式转换:'{26053,26021}'::int[]或者您可以使用另一个数组构造函数,这次基于整数常量而不是子查询:ARRAY[26053,26021]

[26053,26021]介于两者之间,无论如何都无法发挥作用。