2016-05-17 16 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: '明確な' ヒントの@TimKuehnへ

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

SUM、CDDのRETURN dnameのように(CD)DISTINCT、dnameのAS d.nameと」と "(cd.amount)SUM、dnameのようd.name戻る" 交換してみてください(cdd.amount) " –

+1

ありがとう@TimKuehn。 'distinct'は 'with'の後の最初のキーワードである必要があります。これは動作します: が一致します(:A {名前: 'a1'})< - [:BA] - (:B) - [:BC] - >(c:C) - [cd:CD] - >(d :D) 別名d.name AS dname、cd RETURN dname、SUM(cd.amount)as total – superkruger

答えて

0

感謝。

このクエリは動作します:

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