我有一个带有 id 和集群的 PostgreSQL 表,如下所示:
CREATE TABLE w (id bigint, clst int);
INSERT INTO w (id,clst)
VALUES
(1,0),
(1,4),
(2,1),
(2,2),
(2,3),
(3,2),
(4,2),
(5,4),
(6,5);
Run Code Online (Sandbox Code Playgroud)
如果聚合按 id 分组的集群,您可以看到集群数组中存在重叠值:
select id, array_agg(clst) clst from w group by id order by id;
id | clst
----+---------
1 | {0,4}
2 | {1,2,3}
3 | {2}
4 | {2}
5 | {4}
6 | {5}
Run Code Online (Sandbox Code Playgroud)
即集群4覆盖id 1和5,集群2覆盖id 2、3和4,而集群5只对应一个id。
我现在如何聚合按集群数组重叠分组的 id?即预期的结果是:
id | clst
---------+-------
{1,5} | {0,4,4}
{2,3,4} | {1,2,3,2,2}
{6} | …
Run Code Online (Sandbox Code Playgroud) postgresql ×1