在下面的查询中,我如何找到路径中存在的用户的平均年龄:
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);
在下面的查询中,我如何找到路径中存在的用户的平均年龄:
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);
因此,在 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;
在 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);
编辑:我刚刚发现你可以替换sum(n.Age) / count(n); 简单地用avg(n.Age)