1

次のような、平均以上の接続数を持つグラフ内のすべてのノードを見つけようとしています。

START n=node(*) 
MATCH n-[r]-() 
WITH n, count(r) AS cnt
WITH n, cnt, avg(cnt) AS av 
WHERE cnt > av
RETURN n, cnt

しかし、これは 0 行を返します。ここでの 'av' は 'cnt' に等しいと思います。

cnt から avg に渡すコレクションを作成すると役立つかどうか疑問に思いましたが、これは単にエラーを生成します。

4

2 に答える 2

1

これは、WITH を使用して 1 つのクエリで実行することもできます (Werner が推奨する同じ構文を使用しても)。また、長さとパターンを使用してカウントを取得することで少しごまかしました...これは醜いと言う人もいますが、このようなものをかなり単純化する集約を使用する必要がなくなります。

START n=node(*) 
WITH avg(length(n--())) as avgr 
START n=node(*) 
WHERE length(n--()) > avgr 
RETURN length(n--()) as rc, avgr, n;

http://console.neo4j.org/r/2sp1rt

于 2013-01-14T05:53:41.577 に答える
0

これは、次の 2 つのクエリで行う必要があります。

平均接続数を取得するための 1 つのクエリ:

START n=node(*) 
MATCH n-[r]-() 
WITH n, count(r) as rc 
WITH avg(rc) as avg 
RETURN avg

次に、1 つのクエリで、リレーション カウントが平均を上回っているノードを返します。

START n=node(*) 
MATCH n-[r]-() 
WITH n, count(r) as rc 
WITH avg(rc) as {avg_from_first_query} 
RETURN avg
于 2013-01-11T20:25:53.543 に答える