Мне нужно суммировать элемент массива с предыдущим элементом и создать новый массив с этими элементами. Теперь вручную я использую этот код:
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, который выполняет эту операцию с массивами разной длины.



WITH [12,28,74,45] AS cap
RETURN reduce(x = 0, v IN cap | x + v)
// 159
Вы также можете использовать Функции сбора APOC:
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]│
└───────────────────────┘
Спасибо, я пробовал таким образом в своей БД, и он работает:
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)
Следуя вашему примеру, мне нужен новый массив с [12,12 + 28,12 + 28 + 74,12 + 28 + 74 + 45]