首页 > 解决方案 > 需要帮助确定 2 位演员在最多的电影中一起表演的次数(密码)

问题描述

我编写了下面的命令来列出在不同电影中一起表演的演员对,并列出这对演员一起表演的次数。

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

我觉得这是不准确的,因为它计算重复实例,即 -xy被计为一个实例,并且yx被计为一个单独的实例。有谁知道如何解决这一问题?

任何帮助,将不胜感激。

标签: neo4jcypher

解决方案


要正确查看每对演员出现的电影(按共享电影的降序排列),这应该有效:

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和)使用相同or子句COLLECT中的非聚合元素作为“分组键”的事实。此外,不需要,因为聚合函数隐式返回不同的行(如果有任何分组键)。WITHRETURNDISTINCT


推荐阅读