Neo4j中如何按相同id对列求和,匹配指定总和返回对应id
问题分析
你编写的Cypher查询存在两处核心错误:
- 匹配节点时添加了固定id
id: "arqz12a"的过滤条件,仅能匹配单个特定节点,无法覆盖所有用户的UR节点完成全量统计 - 执行SUM聚合计算时没有按用户id(urid)分组,无法得到每个用户独立的oc字段累计总和
正确实现方案
可以通过Cypher参数$target_total接收外部传入的目标总数值,动态匹配符合条件的用户id,查询语句如下:
// $target_total 为外部传入的目标总和参数 MATCH (ur:UR) WITH ur.urid AS urid, SUM(ur.oc) AS total_oc WHERE total_oc = $target_total RETURN urid, total_oc
如果需要固定目标值测试,直接替换$target_total为具体数值即可,例如查询目标总和为9时,将WHERE条件改为WHERE total_oc = 9,就能得到返回urid为1的结果,完全符合预期。
执行逻辑说明
- 第一步匹配所有标签为UR的节点,不做额外过滤
- 第二步自动按非聚合字段urid分组,计算每个用户的oc字段累计总和
- 第三步过滤出累计总和等于目标值的分组
- 第四步返回符合条件的用户id和对应的累计值
内容的提问来源于stack exchange,提问作者Benk I
相关产品推荐
相关产品推荐

