我写了下面的命令,列出了在不同电影中一起表演的演员对,并列出了这对演员一起表演的次数。
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
被计为一个单独的实例。有谁知道如何解决这个问题?
任何帮助将不胜感激。
是的,您可以为此添加一些逻辑,例如:
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
此查询考虑了聚合函数(如COUNT
和COLLECT
(在与"分组键"相同的WITH
或RETURN
子句中使用非聚合元素的事实。此外,不需要DISTINCT
,因为聚合函数隐式返回不同的行(如果有任何分组键(。