Сумма между элементами массива и создание нового массива на языке Cypher - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно суммировать элемент массива с элементом ранее и создать новый массив с этими элементами. В ручном режиме сейчас я использую этот код:

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

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Спасибо, я пытался таким образом на моей БД, и она работает:

   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)
0 голосов
/ 08 ноября 2018

Cypher имеет функцию reduce:

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]│
└───────────────────────┘
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...