postgreSQL查询,将具有流量的图路径转换为相邻节点流量



给定一个表,描述图中具有通量的路径

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上的运行示例。

最新更新