我有一个包含三列 X、Y、Z 的 SQL 表。我需要将它分组,这样所有具有相同 X 或 Y 或 Z 值的记录都分配到同一组。我需要确保具有相同值 X 或 Y 或 Z 的记录绝不会拆分到多个组中。
如果您将记录视为节点,将 X、Y、Z 的值视为边,则此问题与查找所有图形相同,其中每个图形中的节点将通过 X、Y 或 Z 直接或间接连接-边,但每个图将没有与其他图共有的边(否则它将是同一图的一部分)。
几年前我知道这叫什么,甚至还记得算法,但现在我忘记了。请告诉我如何调用此问题,以便我可以通过 Google 寻求解决方案。如果您现在有一个好的算法——请指点我一下。如果你有一个 SQL 实现——我会嫁给你:)
例子:
X Y Z BUCKET
--------- ---------------- --------- -----------
1 34 56 1
54 43 45 2
1 12 22 1
2 34 11 1
最后一行在桶 1 中,因为 Y=34 的值与第一行相同,在桶 1 中。
最佳答案
它看起来不像一个图表,更像是一个 simplicial complex . 但是如果我们把这个复杂的东西当作它的骨架图(数字被当作顶点,表格中的一行意味着所有这三个顶点都由一条边连接),那么我们可以使用任何算法来找到 connected components。这张图。我不确定在 SQL 中是否有可行的方法来执行此操作,也许使用 graph database 会更谨慎不知何故。
但是,对于这个特定问题,可能有一些我没有寻找的通过 SQL 获得的简单解决方案。
关于sql - 识别连接节点堆中的图——这怎么称呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688281/