给定一个表,描述图中具有通量的路径
node1 | node2 | node3 | flux
A | B | C | 15
E | B | D | 10
A | B | D | 5
我想查询相邻节点的流量总和,即
out_node | in_node | flux
A | B | 20 (15 + 5)
B | C | 15
E | B | 10
B | D | 15 (10 + 5)
节点A~>C应该是0,因为我们在a和C 之间没有直接的边缘
我的想法:
我们可以按相邻节点进行多个查询分组,例如
SELECT node1 as out_node,
node2 as in_node,
sum(flux)
FROM table,
GROUP BY out_node, in_node
SELECT node2 as out_node,
node3 as in_node,
sum(flux)
FROM table,
GROUP BY out_node, in_node
然后连接这两个查询并执行另一个GROUP BY
对于路径中的大量节点,有没有更好的解决方案?由于例如1000个节点,我们需要进行999次查询
你可以做:
select node1, node2, sum(flux) as flux
from (
select node1, node2, flux from t
union all select node2, node3, flux from t
) x
group by node1, node2
结果:
node1 node2 flux
------ ------ ----
A B 20
B C 15
B D 15
E B 10
请参阅DB Fiddle上的运行示例。