需要帮助计算出 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被计为一个单独的实例。有谁知道如何解决这个问题?

任何帮助将不胜感激。

是的,您可以为此添加一些逻辑,例如:

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

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

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

此查询考虑了聚合函数(如COUNTCOLLECT(在与"分组键"相同的WITHRETURN子句中使用非聚合元素的事实。此外,不需要DISTINCT,因为聚合函数隐式返回不同的行(如果有任何分组键(。

最新更新