Нужна помощь, чтобы выяснить, сколько раз 2 актера сыграли вместе в большинстве фильмов (шифр) - PullRequest
1 голос
/ 02 декабря 2019

Я написал команду ниже, чтобы перечислить пары актеров, которые играли вместе в разных фильмах, и перечислить, сколько раз пары играли вместе.

match (person1)-[:ACTED_IN]->(Movie)<-[:ACTED_IN]-(person2)
return DISTINCT Movie.title, person1.name, person2.name, count(Movie) AS pairs
ORDER BY pairs DESC

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

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2019

Для правильного просмотра фильмов, в которых появилась каждая пара актеров (в порядке убывания общих фильмов), это должно работать:

MATCH (p1:Person)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(p2:Person)
RETURN p1.name, p2.name, COLLECT(m) AS movies, COUNT(m) AS pairs
ORDER BY pairs DESC

Этот запрос учитывает тот факт, что агрегирует функции (например, COUNT и COLLECT) используют неагрегирующие элементы в том же предложении WITH или RETURN в качестве "ключей группировки". Кроме того, DISTINCT не требуется, поскольку функции агрегирования неявно возвращают различные строки (если есть какие-либо ключи группировки).

0 голосов
/ 02 декабря 2019

Да, вы можете добавить некоторую логику для этого, например:

MATCH (person1)-[:ACTED_IN]->(Movie)<-[:ACTED_IN]-(person2) 
WHERE id(person1) < id(person2)
RETURN DISTINCT Movie.title, 
                person1.name, 
                person2.name, 
                count(Movie) AS pairs 
ORDER BY pairs DESC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...