没有重复的ARRAY_AGG

时间:2019-07-18 17:37:32

标签: sql database postgresql

PostgreSQL数据库中,我有一个表,其中有类似ITEM_IDPARENT_ITEM_ID的列。

| ITEM_ID | ITEM_NAME | PARENT_ITEM_ID |
|---------|-----------|----------------|
| 1       | A         | 0              |
| 2       | B         | 0              |
| 3       | C         | 1              |

我的任务是从这些列中获取所有值并将它们放入一个数组。同时,我需要删除所有重复项。我从这样的SQL查询开始,但是删除重复项的最佳方法是什么?

SELECT
    ARRAY_AGG(ITEM_ID || ',' || PARENT_ITEM_ID)
FROM
    ITEMS_RELATIONSHIP
GROUP BY
    ITEM_ID

我想要这样的结果:

[1,0,2,3]

现在我得到这样的结果:

|{1,0}|
|{2,0}|
|{3,1}|

2 个答案:

答案 0 :(得分:0)

如果要使用所有项目ID的一个数组,请不要按item_id分组。这样的事情可能就是您想要的:

select
    array_agg(item_id, ',') as itemlist
from
    (
        select item_id from items_relationship
        union
        select parent_item_id from items_relationship
    ) as allitems;

答案 1 :(得分:0)

这是一种获取父项ID和其他项ID的方法:

select array_agg(distinct item_id)
from items_relationship ir cross join lateral
     (values (ir.item_id), (ir.parent_item_id)) v(item_id);

这将使用横向联接取消数据透视,然后进行汇总。