计算路线段的成本
Posted
技术标签:
【中文标题】计算路线段的成本【英文标题】:calculate cost of route segments 【发布时间】:2018-11-08 18:50:44 【问题描述】:路线表:
route_id | points
1 | [A,B]
2 | [L,G,C,F,E]
路段成本表:
route_id | point A | pointB | cost
1 | A | B | 10
2 | L | G | 10
2 | G | C | 20
2 | C | F | 15
2 | F | E | 13
需要计算 route_id=2 中点 'G' 和 'E' 之间的成本
【问题讨论】:
您只需要使用 sql 吗?我们可以在任何其他后端语言数据结构中获取此数据并解决此问题。 【参考方案1】:您可以使用“Recursive With Clause”达到您想要的结果。
表:
create table test(
route_id int,
pointA char,
pointB char,
cost int
);
价值观:
insert into test values(1 ,'A','B',10),
(2 ,'L','G',10),
(2 ,'G','C',20),
(2 ,'C','F',15),
(2 ,'F','E',13)
递归查询:
WITH RECURSIVE routecost AS (
SELECT pointA, pointB ,cost /* non recursive part */
FROM test
WHERE pointA = 'G'
and route_id = 2
UNION ALL
SELECT b.pointA, a.pointB, a.cost + b.cost /* recursive part */
FROM test a
JOIN routecost b ON(a.pointA = b.pointB)
where a.route_id = 2
)
SELECT * FROM routecost
where pointB = 'E'
解释:
-
首先以非递归方式过滤带有pointA和route_id的查询
部分。
然后在递归部分加入它,如查询所示并添加成本
我每次都获取 b.pointA(在非递归部分),因为我们
需要起点。
最后我将它过滤到 pointB 值以获得所需
结果。
Reference: Recursive with clause
【讨论】:
以上是关于计算路线段的成本的主要内容,如果未能解决你的问题,请参考以下文章