2016-07-25 10 views
1

Я пытался найти решение моей проблемы с Cypher .. Я пытаюсь суммировать данные отношения по всему пути.Cypher (Neo4j), как суммировать данное свойство по полному пути

Например: 1 -> 2 -> 3 -> 4 Я хочу, чтобы вычислить для узла 1 сумма Сумма собственности для узлов 1,2 3 и 4. (В этом случае 3 и 4 - обе цели узла 2, которые мне не удастся представить здесь)

Мое понимание - мне нужно использовать collect() и уменьшить, но я до сих пор не получаю правильный ответ. У меня есть следующие:

MATCH (n)-[p]->(m) 
WITH m,n, collect(m) AS amounts 
RETURN n.ID as Source,m.ID as Target,n.Amount, 
REDUCE(total = 0, tot IN amounts | total + tot.Amount) AS totalEUR 
ORDER BY total DESC 

я получаю ошибку синтаксиса, но я уверен, что даже без ошибок синтаксиса, что я буду суммирующий только прямые отношения ...

ли вы, ребята, знаете, если я на правильном пути?

Приветствия Max

ответ

0

Вы нужны отношения с переменной длиной в запросе:

MATCH p = (n)-[*]->(m) 
RETURN n.ID as Source, m.ID as Target, n.Amount, 
     reduce(total = 0, tot IN nodes(p) | total + tot.Amount) AS totalEUR 
ORDER BY totalEUR DESC 

Вы не можете заказать по total, которая является локальной переменной функции reduce.

Обратите внимание, что это будет возвращать строки для каждого пути, т.е. 1-->2, 1-->2-->3, 1-->2-->3-->4, 2-->3, 2-->3-->4, 3-->4, так как вы не согласованы по конкретной n.

+0

Привет, Франк и спасибо за ответ! Я не могу получить сумму в выводе, все они отмечены как null. Мне интересно, может ли я иметь проблему с типом данных? – brmaxime

+0

Начните с возврата путей (или первых, по крайней мере, с помощью 'LIMIT') без части' reduce', чтобы увидеть/отладить то, что вы действительно соответствуете. Как вы его представили, запрос очень важен, я предположил, что у вас на самом деле есть дополнительные ярлыки и ограничения, которые здесь не показаны. –

Смежные вопросы