Neo4j cypher查询返回关系属性和所有匹配关系属性的总和

rop*_*ble 1 neo4j cypher

我正在尝试返回一个关系属性(称为proportion)加上Neo4j中Cypher查询匹配的所有关系的该属性的总和.我到目前为止:

START alice=node(3) 
MATCH p=(alice)<-[r:SUPPORTED_BY]-(n) 
RETURN reduce(total=0, rel in relationships(p): total + rel.proportion), sum(r.proportion) AS total;
Run Code Online (Sandbox Code Playgroud)

返回:

+-----------------+
| reduced | total |
+-----------------+
| 2       | 2     |
| 1       | 1     |
+-----------------+
Run Code Online (Sandbox Code Playgroud)

我期待的地方:

+-----------------+
| reduced | total |
+-----------------+
| 2       | 3     |
| 1       | 3     |
+-----------------+
Run Code Online (Sandbox Code Playgroud)

作为Cypher的初学者用户,我不确定如何处理这个查询; 我显然没有reduce正确使用.任何意见,将不胜感激.

Ste*_*ter 7

您需要使用WITH将查询分为两部分:

  1. 找到所有比例的总和,并将其作为绑定名称传递给下一部分
  2. 找到个别比例

.

START alice=node(3)
MATCH alice<-[r:SUPPORTED_BY]-() 
WITH sum(r.proportion) AS total 
MATCH alice<-[r:SUPPORTED_BY]-(other) 
RETURN other.name, r.proportion, total
Run Code Online (Sandbox Code Playgroud)

  • 作为解释,原始查询的问题是sum()也始终执行聚合(即groupBy),在您的情况下是第一列. (2认同)
  • +1 Reduce主要用于可变长度路径或集合 - 如果您已经在不同的"中间结果"或"行"中获得了值,则可以使用此处所示的标准聚合函数. (2认同)