Cypher查询以查找路径中的平均年龄

时间:2012-10-25 06:36:34

标签: neo4j

在下面的查询中,如何找到路径中存在的用户的平均年龄:

start begin=node:Nodes(Name="User_2"), end=node:Nodes(Name="User_32")

match p = begin--()--end

return extract(n in nodes(p): n.Age);

2 个答案:

答案 0 :(得分:2)

在cypher 1.8中修复你的第一个查询:

start begin=node:Nodes(Name="User_2"), end=node:Nodes(Name="User_32")
match begin--middle--end
where has(middle.Age)
return sum(middle.Age) / count(middle);

但是,我相信您要求User_2到User_32的所有用户:

start n=node(*)
where has(n.Age) and Id(n)>1 and Id(n)<33
return sum(n.Age) / count(n);

但在最后一种情况下,如果要求User1和User32之间路径中的所有用户:

start begin=node:Nodes(Name="User_2"), end=node:Nodes(Name="User_32")
match p=begin-[*..]-end
with extract(n in nodes(p): n)
where has(n.Age)
return sum(n.Age) / count(n);

编辑我刚刚发现你可以用 avg(n.Age)替换 sum(n.Age)/ count(n);

答案 1 :(得分:2)

因此,在1.9中,您现在可以使用reduce执行此操作。

start begin=node:Nodes(Name="User_2"), end=node:Nodes(Name="User_32")
match p = begin--()--end
return reduce(total=0, n in nodes(p): total + n.Age) / length(p) as avgAge;