2013-09-24 60 views
1

我試圖返回一個關係屬性(稱爲proportion)加上在Neo4j中由Cypher查詢匹配的所有關係的屬性總和。這一步我已經得到了:Neo4j密碼查詢返回關係屬性和所有匹配關係屬性的總和

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; 

這將返回:

+-----------------+ 
| reduced | total | 
+-----------------+ 
| 2  | 2  | 
| 1  | 1  | 
+-----------------+ 

,我期待:

+-----------------+ 
| reduced | total | 
+-----------------+ 
| 2  | 3  | 
| 1  | 3  | 
+-----------------+ 

作爲暗號的初學者設計的,我真的不知道怎麼樣接近這個查詢;我顯然沒有正確使用reduce。任何意見,將不勝感激。

回答

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 
+2

作爲一個解釋,你原來的查詢的問題是,sum()總是執行一個聚合(即groupBy),在你的情況是第一列。 – PhilBa

+2

+1 Reduce主要用於可變長度路徑或集合 - 如果您已經獲得了不同「中間結果」或「行」中的值,則可以使用標準聚合函數,如下所示。 –