我有一张大图和正好2天的Neo4J,即zilch。
我想计算某些数字属性的所有节点的平均值,比如节点n.prop_01
中出现的(n)
。然后我想得到属性n.prop_01
低于特定阈值的节点,具体取决于平均值。
我在文档或在线论坛上找不到答案或鼓舞人心的事情。我尝试了以下内容以及更多...
MATCH (n) WHERE exists(n.prop_01)
WITH n, collect(n.prop_01) AS all_prop_01
UNWIND all_prop_01 as all_prop
WITH n,prop_01,avg(all_prop) AS avg_prop
WHERE n.prop_01 < (1.1*avg_prop)
RETURN n.name,n.prop_01 LIMIT 20;
结果:(no changes, no records)
。
感谢关于为什么这不起作用以及如何使其工作的任何指示。
答案 0 :(得分:2)
您需要首先计算平均值,然后进行过滤,否则当您展开时,平均值等于每个节点的属性:
MATCH (n) WHERE exists(n.prop_01)
WITH avg(n.prop_01) as avg_prop
MATCH (n) WHERE exists(n.prop_01) AND n.prop_01 < 1.1 * avg_prop
RETURN count(n), avg_prop
答案 1 :(得分:1)
您可以在将节点与prop_01
匹配时计算上游的平均值。
您还应该考虑在匹配项中添加标签,以减少查询需要查看的节点数。
您还可以收集n
个节点,而不仅仅是prop_01
,并在稍后的展开时使用它。
MATCH (n:Add_A_Node_Label_Here)
WHERE exists(n.prop_01)
WITH collect(n) AS all_n, avg(n.prop_01) as avg_prop
UNWIND all_n as n
WITH n, avg_prop
WHERE n.prop_01 < (1.1 * avg_prop)
RETURN n.name, n.prop_01
LIMIT 20;