Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph Neo4J在多个节点上平均数值特性_Graph_Neo4j_Nosql - Fatal编程技术网

Graph Neo4J在多个节点上平均数值特性

Graph Neo4J在多个节点上平均数值特性,graph,neo4j,nosql,Graph,Neo4j,Nosql,我有一个大的图表,正好在我的腰带下有2天的Neo4J,即Zillch 我想计算某个数值属性的所有节点的平均值,比如说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

我有一个大的图表,正好在我的腰带下有2天的Neo4J,即Zillch

我想计算某个数值属性的所有节点的平均值,比如说
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;
匹配(n)存在的位置(n.prop_01)
使用n,收集(n.prop_01)作为所有prop_01
将所有道具01作为所有道具展开
n,道具01,平均(所有道具)作为平均道具
其中n.prop_01<(1.1*avg_prop)
返回n.name,n.prop_01 LIMIT 20;
结果:
(无更改,无记录)


谢谢你的指点,告诉我为什么这不起作用,以及我怎样才能让它起作用

当您将节点与
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;
匹配(n:在此处添加节点和标签)
存在的地方(第01号提案)
将收集(n)作为全部,将平均值(n.prop_01)作为平均值
将所有卷展为n
带n,平均值
其中n.prop_01<(1.1*avg_prop)
返回n.name,n.prop_01
上限20;

您需要首先计算平均值,然后进行过滤,否则在展开时,平均值等于每个节点的属性:

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
匹配(n)存在的位置(n.prop_01)
以平均值(n.prop_01)作为平均值
匹配(n)存在的位置(n.prop_01)和n.prop_01<1.1*平均值
返回计数(n),平均值

+1:谢谢你,戴夫。我在我的真实公式中使用标签。我简化了pbm声明,以便帖子更清晰。您的解决方案有效,但使用collect()和UNWIND。至少就放松而言,我(毫无疑问是非常糟糕的)明白,这通常是昂贵的。出于这个原因,我选择@stdob--的答案,它除了不使用UNWIND之外,还有另一个优点,就是提供了一个更简单的子查询结构。我想从DB拓扑的角度来看,没有明显更好的解决方案。这完全取决于图表的性质。再次感谢您。+1 Tx。请参阅Dave回答下的评论。您是否可以通过强调继续子查询而不是诉诸(有时)必要的放松诅咒的优势来扩展yrs?我来自图表(而不是数据库),我没有找到任何结构良好的解释来说明它们的相对优缺点。还是这就需要我再问一个问题?干杯。@Cbhihe我认为在你的情况下,我的决定的优势在于问题的可读性和清晰性。最有可能的是,表现不应该特别不同。