2016-05-17 82 views
0

我有以下圖表,並且有興趣從a1開始獲取葉節點的所有金額的總和。Cypher聚合路徑子集

enter image description here

然而,與CYPHER它需要所有的路徑到並最終的結果是24而不是12使用SUM查詢。 例如

match (:A {name:'a1'})<-[:BA]-(:B)-[:BC]->(c:C)-[cd:CD]->(d:D) 
return d.name, SUM(cd.amount) 

我的查詢應該是什麼樣子?

下面是創建圖的密碼。

節點:

create (a1:A {name:'a1'}), (b1:B {name:'b1'}), (b2:B {name:'b2'}), 
(c1:C {name:'c1'}), (c2:C {name:'c2'}), (d1:D {name:'d1'}) 

RELS:

match (a1:A {name:'a1'}), (b1:B {name:'b1'}), (b2:B {name:'b2'}), 
(c1:C {name:'c1'}), (c2:C {name:'c2'}), (d1:D {name:'d1'}) 
merge (a1)<-[:BA]-(b1) 
merge (a1)<-[:BA]-(b2) 
merge (b1)-[:BC]->(c1) 
merge (b1)-[:BC]->(c2) 
merge (b2)-[:BC]->(c1) 
merge (b2)-[:BC]->(c2) 
merge (c1)-[:CD {amount: 5}]->(d1) 
merge (c2)-[:CD {amount: 7}]->(d1) 
+1

嘗試與d.name更換 「返回d.name爲DNAME,SUM(cd.amount)」,」 AS DNAME,DISTINCT(CD)爲CDD RETURN DNAME,SUM (cdd.amount)「 –

+1

謝謝@TimKuehn。看起來像'distinct'需要成爲'with'之後的第一個關鍵字。所以這個作品: match(:A {name:'a1'})< - [:BA] - (:B) - [:BC] - >(c:C) - [cd:CD] - >(d :D) 使用不同的d.name AS dname,cd RETURN dname,SUM(cd.amount)作爲總數 – superkruger

回答

0

由於@TimKuehn爲 '不同' 的提示。

此查詢的工作:

MATCH (:A {name:'a1'})<-[:BA]-(:B)-[:BC]->(c:C)-[cd:CD]->(d:D) 
WITH DISTINCT d.name AS dname, cd 
RETURN dname, SUM(cd.amount) as total