我有一个表格,其中包含相关元素的ID。
ID1 ID2
A B
A C
B D
B C
E F
G D
G C
H I
D C
该示例包含以下组:
A,B,C,D,G
E,F
H,I
由于A连接到B,C,B连接到C,D和D连接到G. E,F和H,我只是彼此相关。
是否可以使用SQL找到这些组?不确定SQL的输出是什么,可能是这样的:
ID group
A 1
B 1
C 1
D 1
G 1
E 2
F 2
H 3
I 3
可能某种形式的分层查询会起到作用,但那些通常会让我感到困惑。 只要我可以区分群体。
答案 0 :(得分:0)
这是我发现的:
select root2 || ', ' || listagg(id1, ', ') within group (order by id1) grp
from
(
select id1, max(root2) keep (dense_rank last order by lev) root2
from
(
select t.*, connect_by_root id2 root2, level lev
from <my_table> t
connect by prior t.id1 = t.id2
)
group by id1
)
group by root2
;
这给出了:
**GRP**
C, A, B, D, G
F, E
I, H