[英]How to sum in MySQL recursive query
我的問題陳述是:我需要找到可以從出發地“ A”前往的地點及其各自的費用。
這是我的桌子火車(始發地,目的地,最低費用)
+--------+-------------+------+
| Origin | Destination | cost |
+--------+-------------+------+
| A | B | 1 |
| A | C | 4 |
| B | C | 2 |
| A | D | 4 |
+--------+-------------+------+
我試過查詢:
with recursive Final(Origin, Destination, LeastCost) As(
-> (Select * from Train)
-> UNION
-> (Select T.Origin, F.Destination, F.LeastCost
-> from Train T, Final F
-> where T.Destination = F.Origin))
-> select * from Final ;
這給了我:
+--------+-------------+-----------+
| Origin | Destination | LeastCost |
+--------+-------------+-----------+
| A | B | 1 |
| A | C | 4 |
| B | C | 2 |
| A | D | 4 |
| A | C | 2 |
+--------+-------------+-----------+
我正在尋找的結果是
Origin | Destination | Price |
A C 3
由於A-> B = 1,B-> C = 2,所以最后一行中的A-> C = 1 + 2 = 3。
我該如何實現? 我嘗試在遞歸查詢中使用SUM(LeastCost),但MySQl不允許在那里進行聚合。
在遞歸查詢中將T和F別名中的兩個成本加在一起。 然后在最終查詢中添加其他邏輯以對結果進行分組:
with recursive Final(Origin, Destination, LeastCost) As(
(Select * from Train)
UNION
(Select T.Origin, F.Destination, T.cost + F.LeastCost
from Train T, Final F
where T.Destination = F.Origin)
)
select Origin, Destination, min(LeastCost)
from Final
group by Origin, Destination
通過遞歸機制, T.cost + F.LeastCost
將使您在從一個節點穿過樹到另一個節點的過程中T.cost + F.LeastCost
成本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.