0

ノード (Neo4J) に対して複数の着信および発信関係があります。

各関係には数値プロパティ「重み」があります

ノードの着信ウェイトと発信ウェイトの差を取得する必要があります。

このクエリを試してみましたが、着信重みの合計が 20 であっても、両方の合計に対して 0 を返します。

MATCH out=(n:Person)-[r:FRIEND]->(), in=(n:Person)<-[s:FRIEND]-() 
WHERE n.personid='12345' 
RETURN sum(r.fweight), sum(s.fweight);

また、私はこれを試しました...そしてクラッシュ/戻りません

MATCH (n:Person)-[r:FRIEND]->()  
MATCH (n:Person)<-[s:FRIEND]-()
WHERE n.personid='12345'
RETURN sum(r.fweight) , sum(s.fweight)

どんな手掛かり???:D

4

2 に答える 2

2

おそらく、「Return」のプロパティ名「fweight」が、関係「r」または「s」で実際に使用される「weight」と同じではないためです。に変更すると動作するはずです。

RETURN sum(r.weight), sum(s.weight)

しかし、結果は、多くの重複 r と重複 s を含むすべてのタプル (r, s) の合計です。

正確な合計を取得するには、個別の r と s のコレクションを取得してから、次のようにコレクションを合計します。

RETURN reduce(sumr = 0, x in collect(distinct r)|sumr + x.weight) as sumr, reduce(sums = 0, x in collect(distinct s)|sums + x.weight) as sums

「r」と「s」のプロパティの直和を使用したクエリを表示するコンソールは、http://console.neo4j.org/? id=cqs2h7 です。

コレクションを含むクエリを表示するコンソールは、http://console.neo4j.org/?id=9st2mqです。

どちらも合計を返しますが、"RETURN sum(r.weight), sum(s.weight)" を使用した最初のクエリの結果には重複した関係 "r" と "s" が含まれていますが、2 番目のクエリには重複した関係が含まれています。 with collections は重複を削除し、目的の合計を返します。

于 2013-10-30T18:31:57.300 に答える