我已经开始学习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
但我只是想了解如何修复上一个查询。
答案 0 :(得分:1)
为了获得平均评分的最大值,您需要消除或汇总m
和ar
,以便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