給定一個表格,在圖中描述具有通量的路徑
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 次查詢
uj5u.com熱心網友回復:
你可以做:
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上的運行示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448465.html
標籤:sql PostgreSQL
上一篇:COUNT(1)還是COUNT(*)更適合PostgreSQL
下一篇:處理函式數值變數上的空值''
