【问题标题】:Neo4J Cypher calculate average across multiple propertiesNeo4J Cypher 计算多个属性的平均值
【发布时间】:2017-03-28 16:37:10
【问题描述】:

在 Neo4J 中我有以下问题:

节点以树状或父/子样式结构排列。 在“叶子”或子节点上,每个节点都有一组数字属性。

我需要一个 Cypher 查询来计算每个属性的平均值并将其存储在父节点中具有相同名称的属性中。

有点像

MATCH (p:Parent)-[]->(c:Child) 
SET p.attrib1 = avg(c.attrib1)
SET p.attrib2 = avg(c.attrib2)

会做这项工作,但是......

子节点中的属性数量应该是动态的,当子节点出现附加属性名称时,我不想更改代码。只要属性是小数,代码就应该适应这个。

有没有办法做到这一点?

【问题讨论】:

  • 所有Child 节点是否共享同一组数字属性?是否有任何您不想平均的 Child 属性?
  • 某些属性可能不会出现在每个节点中,但没有必要明确排除任何属性的平均值。

标签: neo4j cypher aggregation


【解决方案1】:

您可以在APOC procedure library 的帮助下完成此操作。您可以几乎在本机 Cypher 中执行此操作,但您无法动态指定要创建的属性的名称,但我们可以使用 apoc.create.setProperty 执行此操作:

MATCH (parent:Parent)<-[]-(child:Child) 
WITH parent, child, keys(child) AS props
UNWIND props AS prop
WITH parent, prop, avg(child[prop]) AS mean
CALL apoc.create.setProperty(parent, prop, mean) YIELD node
RETURN *

这个Neo4j Console.有一个简单的例子

【讨论】:

  • 酷,我目前还没有使用 APOC,但我会在今天晚些时候尝试一下。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多