不同的查询结果取决于返回Node4j的变量



我从Neo4j开始,正在学习GraphAcademy中级密码课程。

用例是找到用户对汤姆·汉克斯电影的最高平均评分,所以我写了这样的查询

match (p:Person{name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie)<-[r:RATED]-(u:User)
with avg(r.rating) as average, r.rating as rating, m.title as movie
return movie, average, rating order by average desc limit 1

其返回"0";如果你能抓住我"5.0 5.0--->错误的答案。。。

如果我将查询中的评级作为

match (p:Person{name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie)<-[r:RATED]-(u:User)
with avg(r.rating) as average,  m.title as movie
return movie, average order by average desc limit 1

它返回"0";菲利普斯上尉;4.2--->正确答案

如果我包括评级,为什么返回的值不同?结果是按平均顺序排列的。。。但如果我包括评级,则最高平均值为5.0,而忽略评级时为4.2

我也试着在return子句中计算平均值,但得到了同样错误的结果

match (p:Person{name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie)<-[r:RATED]-(u:User)
with r.rating as rating, m.title as movie
return movie, avg(rating) as average, rating order by average desc limit 1

avg()是一个分组函数,通过在WITH语句中包含r.rating AS rating,它将通过rating计算avg()。因此,它将rating相同的所有情况分组并计算平均值。

当您在第一个查询中删除LIMIT 1时,您将看到ratingaverage的值相同的行数。

最新更新