Neo4j按根节点距离做聚合统计及累计值查询的实现问题
问题修正说明
你编写的Cypher存在3处问题:
- 节点标签错误:你创建的节点标签为
firm,不是示例中的NODE - 路径节点命名重复:MATCH子句中起点和终点都使用
n作为变量名,会触发语法错误 - 可变长度路径取值错误:
[r:REL*1..2]返回的r是关系列表,无法直接通过r.value读取属性,需要通过列表函数处理
查询1:按距离统计关系value平均值
语句如下:
MATCH p=(:firm {name:'A'})-[rels:REL*1..2]->() WITH length(p) AS distance, rels[-1].value AS edge_val RETURN distance, avg(edge_val) AS avg
执行后输出和你预期完全一致:
| distance | avg |
|---|---|
| 1 | 10 |
| 2 | 30 |
查询2:统计各节点从根节点出发的累计value
语句如下:
MATCH p=(:firm {name:'A'})-[:REL*1..2]->(node:firm) WITH node.name AS name, reduce(total = 0, r IN relationships(p) | total + r.value) AS cum RETURN name, cum
执行后输出和你预期完全一致:
| name | cum |
|---|---|
| B | 20 |
| C | 60 |
| D | 0 |
| E | 20 |
内容的提问来源于stack exchange,提问作者cccfran
相关产品推荐
相关产品推荐

