Возврат двух агрегатов в одном запросе Cypher?

Я боролся с Сайфером, пытаясь вычислить СУММУ двух значений и найти разницу. У меня есть эти два запроса, которые находят общее количество отправленных и полученных узлов:

START addr = node(5)
MATCH addr <- [:owns] - owner - [to:transfers] -> receiver
RETURN SUM(to.value) AS Total_Sent

START addr = node(5)
MATCH addr <- [:owns] - owner <- [from:transfers] - sender
RETURN SUM(from.value) AS Total_Received

В основном мой вопрос: как мне объединить эти два отдельных запроса, чтобы я мог понять разницу между Total_Sent и Total_Received? Я пробовал несколько начальных точек, например:

START sendAddr = node(5), receivedAddr = node(5)
MATCH sendAddr <- [:owns] - sendOwner - [to:transfers] -> receiver, receivedAddr <- [:owns] - receiveOwner <- [from:transfers] - sender
RETURN SUM(to.value) AS Total_Sent, SUM(from.value) AS Total_Received, SUM(to.value) - SUM(from.value) AS Balance

Но Total_Received равен нулю! Для меня это выглядит довольно простым вариантом использования — что, черт возьми, я делаю неправильно?


person John Russell    schedule 04.09.2012    source источник


Ответы (1)


Вы не можете объединить два запроса, просто соединив их вместе. :)

Чтобы решить эту проблему, я предлагаю вам использовать WITH для разделения вашего запроса на две части, например:

START addr = node(5)
MATCH addr <- [:owns] - owner - [to:transfers] -> receiver
WITH addr, SUM(to.value) AS Total_Sent

MATCH addr <- [:owns] - owner <- [from:transfers] - sender
WITH SUM(from.value) AS Total_Received, Total_Sent

RETURN Total_Received, Total_Sent, Total_Received - Total_Sent as Total_Balance

ХТХ,

Андрес

person Andres    schedule 04.09.2012
comment
Кажется, я не могу заставить это работать - я продолжаю получать «SyntaxException: ожидаемое предложение возврата», а стрелка указывает на «Total_Received, Total_Sent» в четвертой строке. Есть идеи? - person John Russell; 04.09.2012
comment
Я предполагаю, что вы используете версию 1.7 Neo4j, верно? WITH был представлен в версии 1.8. - person Andres; 05.09.2012
comment
Аргх, да... Я хотел дождаться стабильной версии 1.8 перед обновлением - хорошо, спасибо! - person John Russell; 05.09.2012