【问题标题】:Neo4j Cypher : avg of positive values return negative averageNeo4j Cypher:正值的平均值返回负平均值
【发布时间】:2015-06-05 10:06:36
【问题描述】:

我正在我的 Neo4J 图表上运行此查询:

match (person:Person)-[r:KNOWS]->(friend:Person)
return avg(r.duration)

KNOWS 关系的 duration 属性是一个双精度值,始终填充且始终为正数。

我的问题是这个查询返回一个负值。 我用这个查询验证了这一点:

match (person:Person)-[r:KNOWS]->(friend:Person)
where has(r.duration) and r.duration > 0
return avg(r.duration)

它也返回一个负值。

你知道这种行为背后的原因吗?

【问题讨论】:

  • 您使用的是什么版本的 Neo4j。我刚刚在这里创建了一个经过测试的小型控制台,似乎还可以? console.neo4j.org/r/ei28q2
  • 我使用的是 Neo4j 2.2.2。
  • 你能像我一样用一些数据创建一个控制台吗
  • 我进行了更深入的调查:- 属性类型是 int,而不是 double。 - 总和大于 int 最大值不确定是否可以在 neo4j 控制台中强制属性类型,我用 longs 复制了它:console.neo4j.org/r/chtfmz
  • 除了密码问题,我认为在应用程序级别这种行为应该引发异常

标签: neo4j cypher


【解决方案1】:

感谢控制台,确实 int max 值溢出了。

我不能说什么是您的用例的最佳方式,我需要进一步调查,但是与此同时,如果您将分数转换为浮点值,那么它们是积极的:

MATCH (person:Person)-[r:KNOWS]->(friend:Person)
WITH toFloat(r.score) AS score
RETURN sum(score), avg(score)

更新

嗯,显然这个值是用上述解决方案四舍五入的,所以暂时忽略它

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多