在postgres select中,将列子查询返回为数组?

时间:2015-07-16 11:40:48

标签: arrays postgresql subquery aggregate-functions

(以前做过这个,但是内存会消失,就像护目镜一样)

希望从作为数组返回的每个用户的users中选择tag.tag_id

select usr_id,
       name,
       (select t.tag_id from tags t where t.usr_id = u.usr_id) as tag_arr
from   users u;

嵌入式查询tag_arr的想法是一个数组

1 个答案:

答案 0 :(得分:9)

使用aggregate function

select
    usr_id, 
    name, 
    array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name

或来自子查询结果的array constructor

select
    u.usr_id, 
    name, 
    array(select tag_id from tags t where t.usr_id = u.usr_id) as tag_arr
from users u

第二个选项简单快速,而第一个选项更通用,例如在需要使用多个聚合的情况下。