neo4j получить значения, которые соответствуют критерию - PullRequest
0 голосов
/ 01 октября 2018

Я работаю над запросом neo4j, пытаясь вернуть узел с общим владельцем 1 (представляющий 100%).Итак, я суммирую владение узлом.Мой запрос на получение суммы владения работает правильно и выглядит следующим образом:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership)

Итак, я пытаюсь использовать это в выражении:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership) case when sum(o.ownership) = 1 then w.name else "None"

и получите эту ошибку: Neo.ClientError.Statement.SyntaxError: Invalid input 's': expected 'l/L' (line 3, column 3 (offset: 78)) "case" ^

Это то, для чего мне нужно использовать APOC?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Помимо вашего непосредственного вопроса, ваша модель данных нуждается в улучшении.Свойство ownership должно , а не находиться на узле owner, поскольку это будет означать, что владелец имеет одинаковый точный процент владения для всех скважин, в которых он / она заинтересован.Вместо этого свойство ownership должно находиться в отношении mineral_interest_owner, что позволило бы различаться всем процентам ownership.

Предполагая, что вы включили вышеуказанное улучшение модели данных в свою БД, этот запросдолжен вернуть все пары owner / well, владельцу которых принадлежит 100% этой скважины.

MATCH (owner:owner)-[i:mineral_interest_owner]->(well:well)
WITH owner, well, SUM(i.ownership) AS pct
WHERE pct = 1
RETURN owner, well;
0 голосов
/ 01 октября 2018

Вам нужно агрегировать и затем использовать where:

MATCH (o:owner)-[:mineral_interest_owner]->(w:well)
WITH w, 
     sum(o.ownership) AS cnt WHERE cnt = 1
RETURN w
...