Cypher最高平均值

时间:2018-03-25 22:53:09

标签: neo4j cypher aggregate

我已经开始学习Cypher,但我遇到了聚合问题。 我的DB有节点MOVIE和关系RATED(它有一个属性“rating”)。我想采取一个最大平均评级的节点[我的意思是最大(平均(评级))]。不幸的是,当我在第二部分添加“m”和“ar”时,我接收到每行的最大值,但我需要计算总体最大值。

MATCH (m:MOVIE)-[r:RATED]-() WITH m, AVG(r.rating) AS ar
MATCH (m:MOVIE)-[r:RATED]-() m,ar,WITH max(ar) AS mr
WHERE ar = mr return m

P.S。很明显,我可以这样做

MATCH (m:MOVIE)-[r:RATED]-() WITH m, AVG(r.rating) AS ar RETURN m ORDER BY ar DESC LIMIT 1

但我只是想了解如何修复上一个查询。

1 个答案:

答案 0 :(得分:1)

为了获得平均评分的最大值,您需要消除或汇总mar,以便max()考虑所有行(聚合计算相对于非-aggregation变量,形成分组键。

这是你可以做到的一种方式。

MATCH (m:MOVIE)-[r:RATED]-() 
WITH m, AVG(r.rating) AS ar
WITH collect({m:m, ar:ar}) as movies, max(ar) as max
UNWIND [movie in movies where movie.ar = max] as m
RETURN m
相关问题