相关疑难解决方法(0)

按数组重叠分组

我有一个带有 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

5
推荐指数
1
解决办法
584
查看次数

标签 统计

postgresql ×1