我们说我有以下数据:
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}
有人可以帮我解决这个问题吗? 是的,事实上,我在一系列常见的表格表达式中使用它。
答案 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;