You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Neo4j中如何仅用每个用户的最新评分计算电影平均评分?

电影平均评分查询优化方案

原查询问题说明

当前编写的Cypher语句未对同一用户的多条评分记录做筛选,也没有引入时间维度判断帖子发布先后,直接对所有匹配到的评分值取平均,会导致同一用户的多次评分被重复计入最终结果,不符合需求。

解决方案

默认Post实体存在createdAt字段存储发布时间戳(数值越大代表发布时间越新,若实际字段名不同可自行替换),优化后的查询语句如下:

MATCH (m:Movie { name: "The Dark Knight"})-[:HAS_RATING]-(r:Rating)--(p:Post)--(u:User)
// 按用户分组,同一用户的帖子按发布时间倒序排列
WITH u, r, p ORDER BY u.id, p.createdAt DESC
// 每个用户仅取排序后的第一条即最新评分
WITH u, collect(r)[0] AS latestRating
// 对所有用户的最新评分计算平均值并保留两位小数
RETURN apoc.math.round(avg(latestRating.value), 2)

逻辑说明

  • 匹配环节先关联到目标电影对应的所有评分、关联帖子、发布帖子的用户全链路数据
  • 排序环节将同一用户的所有带评分帖子按发布时间倒序排列,保证最新的帖子排在最前
  • 筛选环节通过collect(r)[0]取每个用户的最新一条评分记录
  • 最终计算平均值时仅使用每个用户的唯一最新评分,避免重复统计

内容的提问来源于stack exchange,提问作者Thingamajig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:36:03