按列

时间:2017-06-22 07:36:40

标签: sql postgresql postgresql-9.4

我们说我有以下数据:

gp_id | p_id
------|-------
1     | 123
2     | 432
2     | 222

出于业务逻辑的目的,我必须将其转换为:

gp_id | p_ids
------|----------
1     | {123}
2     | {432,222}

我试图做这样的事情(实际上,我明白这是错误的方法,但仍然):

select gp_id, array(
    select p_id from cte
    ) as p_ids
from cte

并且,可以预见的是,它会返回以下内容:

gp_id | p_ids
------|--------------
1     | {123,432,222}
2     | {123,432,222}
2     | {123,432,222}

有人可以帮我解决这个问题吗? 是的,事实上,我在一系列常见的表格表达式中使用它。

2 个答案:

答案 0 :(得分:3)

我认为你可以使用array_agg

select
    gp_id, array_agg(p_id) as p_ids
from cte
group by gp_id

答案 1 :(得分:1)

尝试以下查询:

select c1.gp_id, array(
    select p_id from cte c2 where c2.gp_id = c1.gp_id
    ) as p_ids
from cte c1 group by c1.gp_id;

OR

select gp_id, group_concat(p_id) p_ids
from cte group by gp_id;