Cypher Query для поиска агрегированной суммы соединений - PullRequest
0 голосов
/ 30 сентября 2019

Попытка найти подходящий запрос Cypher для следующего набора данных:

Joe --> Hotel1 (connnection score is 1)
Blogg --> Hotel1 (connnection score is 1)
Joe --> Hotel2 (connnection score is 1)
Blogg --> Hotel2 (connnection score is 1)

Я хочу агрегировать оценку соединений и сказать, что у Joe & Blogg оценка соединения 2 (Отель 1оценка + оценка отеля 2).

Джо, Blogg, Hotel1, Hotel2 моделируются как узлы и -> означает «STAYED_IN».

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

1 Ответ

0 голосов
/ 30 сентября 2019

Если между каждым человеком и гостиницей существует не более одной связи, вы можете использовать

MATCH (p1:Person)-->(h1:Hotel)<--(p2:Person)
WHERE p1.name>=p2.name
WITH DISTINCT p1,p2
MATCH (p1:Person)-[c1]->(h1:Hotel)<-[c2]-(p2:Person)
RETURN p1.name, p2.name, SUM(c1.score+c2.score)

, если ваш график имеет следующую форму:

CREATE (p1:Person {name: 'Joe'})
CREATE (p2:Person {name: 'Blogg'})
CREATE (h1:Hotel {name: "Hotel1"})
CREATE (h2:Hotel {name: "Hotel2"})
CREATE (p1)-[:stayed_in {score: 1}]->(h1)
CREATE (p2)-[:stayed_in {score: 2}]->(h1)
CREATE (p1)-[:stayed_in {score: 1}]->(h2)
CREATE (p2)-[:stayed_in {score: 1}]->(h2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...