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 在一个查询中执行此操作(即使使用 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

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

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

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
于 2013-01-11T20:25:53.543 回答