我试图在图中找到所有连接数高于平均水平的节点,例如:
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 是否会有所帮助,但这只会产生错误。
只是插话。您也可以使用 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;
您必须使用两个查询来执行此操作:
一个查询,获取平均连接数:
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