如何在Cypher中对多个数组的所有元素进行求和计算?
解决方法
当然可以在Cypher里对数组内的值进行求和!针对你给出的场景,这里有两种直观的实现方式:
方法一:合并数组后展开求和
这种方法先把两个数组合并成一个数组,再通过UNWIND展开所有元素,最后用SUM()计算总和,逻辑清晰易懂:
// 先执行你的原有查询获取两个数组,再合并处理 MATCH p, p1 // 这里补充你实际的匹配逻辑 WITH p.home as home, p1.away as away, collect(distinct toInteger(p.score[0])) as value1, collect(distinct toInteger(p1.score[1])) as value2 // 合并两个数组 WITH home, away, value1 + value2 as combinedArray // 展开数组中的每个元素 UNWIND combinedArray as num // 计算所有元素的总和 RETURN home, away, sum(num) as totalValue
方法二:用Reduce分别累加后求和
如果你不想展开数组,可以用REDUCE()函数分别遍历两个数组进行累加,再将两个结果相加:
MATCH p, p1 WITH p.home as home, p1.away as away, collect(distinct toInteger(p.score[0])) as value1, collect(distinct toInteger(p1.score[1])) as value2 // 对两个数组分别使用reduce求和,再相加得到总和 RETURN home, away, reduce(s = 0, num IN value1 | s + num) + reduce(s = 0, num IN value2 | s + num) as totalValue
两种方法都能得到你想要的totalValue,你可以根据自己的查询场景选择更合适的方式~
内容的提问来源于stack exchange,提问作者Suman
相关产品推荐
相关产品推荐

