neo4j получает значения, соответствующие критериям

Я работаю над запросом 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?


person Michael Porter    schedule 01.10.2018    source источник


Ответы (2)


Помимо вашего непосредственного вопроса, ваша модель данных, похоже, нуждается в улучшении. Свойство 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;
person cybersam    schedule 01.10.2018
comment
Спасибо за предложение. Я новичок в веселой стране лизинга нефти и газа, поэтому разбираюсь в этом. Я включу эти изменения. - person Michael Porter; 02.10.2018
comment
Отлично. Кстати, когда кто-то принимает ответ, он обычно также голосует за него. - person cybersam; 02.10.2018

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

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