gpt4 book ai didi

sql - 如何在 SQL 中识别一组弧/边中的组/簇?

转载 作者:行者123 更新时间:2023-12-03 09:34:21 26 4
gpt4 key购买 nike

我有像这些“有”这样的弧/边:

Node1   Node2
A B
B C
D E

这里 A 连接到 B,B 连接到 C。D 连接到 E。换句话说,这些“想要”中显示了 2 个组/集群:

Node1   Node2   Cluster
A B 1
B C 1
D E 2

我可以使用 SQL 来识别这些组/集群吗?我想这涉及自联接,但我看不到如何编写此 SQL。任何反馈将不胜感激。谢谢!

最佳答案

假设根据所提供的样本数据,没有像 A->B->C->A 这样的循环。在数据中,以下是将从 nodes 返回所需输出的查询 table 。

WITH RECURSIVE NodeCluster (node1,node2,Cluster1) AS
(SELECT node1,
node2,
Rank() Over (
ORDER BY node1)
FROM nodes AS n1
WHERE NOT EXISTS
(SELECT *
FROM nodes AS n2
WHERE n1.node1 = n2.node2)
UNION ALL SELECT N1.node1,
N1.node2,
NodeCluster.Cluster1
FROM nodes n1,
NodeCluster
WHERE NodeCluster.node2=n1.node1 )
SELECT *
FROM NodeCluster
ORDER BY Cluster1,
node1,
node2;

在种子查询中,所有起始节点都被选中, rankedasc以升序为数据分配簇号。

根据所提供的数据,以下是输出。
Node1 | Node2  | Cluster1
-------------------------
A B 1
B C 1
D E 2

为再次保证,更多数据已添加到示例数据中,如下所示。
Node1 | Node2
-------------
A B
B C
D E
E F
F G
H I
I J
J K
L M

查询导致以下输出。
Node1 | Node2  | Cluster1
-------------------------
A B 1
B C 1
D E 2
E F 2
F G 2
H I 3
I J 3
J K 3
L M 4

使用 Teradata SQL Assistant 成功测试了解决方案查询和 bteqteradataANSI模式。

希望这会有所帮助。

关于sql - 如何在 SQL 中识别一组弧/边中的组/簇?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45212799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com