在PostgreSQL
数据库中,我有一个表,其中有类似ITEM_ID
和PARENT_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}|
答案 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);
这将使用横向联接取消数据透视,然后进行汇总。