查找具有大于平均连接数的节点

时间:2013-01-11 17:36:55

标签: graph neo4j cypher

我试图找到图表中具有高于平均连接数的所有节点,例如:

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会有所帮助,但这只会产生错误。

2 个答案:

答案 0 :(得分:1)

只是快进来。您也可以在一个查询中使用WITH(即使使用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

答案 1 :(得分:0)

您必须使用两个查询执行此操作:

一个查询,以获取平均连接数:

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

然后一个查询,返回关系计数高于平均值的节点:

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