查询路径上子路径的属性的连乘,多条路径的累计累计
发布于 4 年前 作者 neo4j123 964 次浏览 来自 问答

路径如图所示,每条边上都有个属性:s,代表持股数量,为一个数值,新建路径

create p=(:COMPANY{value:‘Y’)<-[:STAKE{s:0.8]-(:COMPANY{value:‘A’)<-[:STAKE{s:1]-(:COMPANY{value:‘B’)-[:STAKE{s:1]->(:COMPANY{value:'C-[:STAKE{s:1]->(:COMPANY{value:‘D’)-[:STAKE{s:1]->(:COMPANY{value:‘E’)-:STAKE{s:1-[:STAKE{s:0.9]->(:COMPANY{value:‘G’) return p

match (n:COMPANY{value:‘B’),(m:COMPANY{value:‘G’) create p=(n)-[:STAKE{s:0.2]->(:COMPANY{value:‘C1’) -[:STAKE{s:1]->(:COMPANY{value:‘D1’)-[:STAKE{s:1]->(:COMPANY{value:‘E1’)-[:STAKE{s:1]- (:COMPANY{value:‘F1’)-[:STAKE{s:1]->(m) return p image.png ** 目的:B到G路径(有两条,路径1和路径2),计算每条路径上的边相乘,在把路径1得到的结果和路径2得到的结果相加,作为B到G的最终值1,同样,计算B到Y同一路径上每条边相乘后,不同路径的累加结果,作为最终值2,然后同时输出最终值1和最终值2**

尝试计算

match p1=(n:COMPANY{value:‘B’})-[:STAKE1…5]-(n:COMPANY{value:‘G’}),p2=(n)- [:STAKE1…5]-(:COMPANY{value:‘Y’}) with p1,reduce(total=1.0, n in relationships(p1)|total*n.S) as acc return sum(acc)

发现结果 不对,然后直接

match p1=(n:COMPANY{value:‘B’})-[:STAKE1…5]-(:COMPANY{value:‘G’}),p2=(n)- [:STAKE1…5]-(:COMPANY{value:‘Y’}) return relationships(p1)

发现返回的边重复了很多,不知怎么回事?还有就是,怎么能同时计算路径p1的结果和p2的结果,同时输出?

回到顶部