【问题标题】:Sum between array's elements and creation of new array in Cypher language数组元素之间的求和与 Cypher 语言中新数组的创建
【发布时间】:2019-04-11 22:49:24
【问题描述】:

我需要将数组的一个元素与之前的元素相加,并用这些元素创建一个新数组。 现在我以手动方式使用此代码:

match (a:User) 
with collect(a.capital) as cap 
with cap as cap, length(cap) as len
return cap[0], 
       cap[0]+cap[1], 
       cap[0]+cap[1]+cap[2],
       cap[0]+cap[1]+cap[2]+cap[3], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4]+cap[5], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4]+cap[5]+cap[6], 
       len

但我需要使用查询 Cypher 对不同长度的数组执行此操作。

【问题讨论】:

    标签: arrays list neo4j cypher reduce


    【解决方案1】:

    Cypher 具有reduce 功能:

    WITH [12,28,74,45] AS cap
    RETURN reduce(x = 0, v IN cap | x + v)
    // 159
    

    你也可以使用APOC collection functions

    WITH [12,28,74,45] AS cap
    RETURN apoc.coll.sum(cap)
    // 159.0
    

    更新

    WITH [12,28,74,45] AS cap
    UNWIND range(1, size(cap)) AS i
    WITH apoc.coll.sum(cap[0..i-1])
         + apoc.coll.sum(cap[0..i]) AS sum
    RETURN collect(sum)
    

    结果:

    ╒═══════════════════════╕
    │"collect(sum)"         │
    ╞═══════════════════════╡
    │[12.0,52.0,154.0,273.0]│
    └───────────────────────┘
    

    【讨论】:

    • 按照你的例子,我需要一个带有 [12,12+28,12+28+74,12+28+74+45] 的新数组
    【解决方案2】:

    谢谢我在我的数据库上尝试过这种方式,它正在工作:

       WITH [12,28,74,45] AS cap
       UNWIND range(1, size(cap)) AS i
       WITH apoc.coll.sum(cap[0..i]) AS sum
       RETURN collect(sum)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多