Neo4j 平均数最大值

Neo4j 平均数最大值,neo4j,cypher,aggregate,Neo4j,Cypher,Aggregate,我开始学习Cypher,但在聚合方面遇到了一个问题。 My DB具有节点和关系分级,它具有属性分级。我想取一个平均等级最高的节点[我是说maxavgrating]。不幸的是,当我在第二部分中添加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

我开始学习Cypher,但在聚合方面遇到了一个问题。 My DB具有节点和关系分级,它具有属性分级。我想取一个平均等级最高的节点[我是说maxavgrating]。不幸的是,当我在第二部分中添加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
顺便说一句,很明显,我可以这样做

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

但我只想了解如何修复前面的查询。

为了获得最大平均评级,您需要消除或聚合m和ar,以便max考虑所有行聚合都是针对非聚合变量计算的,这些变量构成分组键

这里有一种方法你可以做到

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