我正在使用Neo4j的Movies数据库学习Cypher。我正在尝试查找演员的平均年龄小于40岁的电影,但它并没有对演员的整体进行平均,因此我得到了具有不同平均年龄的标题的副本。
我尝试了两件事:(1)计算演员的发行年份与出生年份之间的差异,并将其平均计算在同一行中;(2)计算年龄,然后使用WHERE
查找演员平均年龄<40岁的电影。
我的第一种方法:
MATCH (a:Person), (m:Movie)
WITH DISTINCT a, m, AVG(m.released - a.born) AS averageAge
WHERE averageAge <= 40
RETURN DISTINCT m.title, averageAge
第二种方法:
MATCH (a:Person), (m:Movie)
WITH DISTINCT a, m, m.released - a.born AS age
WHERE AVG(age) <= 40
RETURN m.title, AVG(age) AS averageAge
均无效。我在做什么错了?
答案 0 :(得分:1)
您需要使用ACTED_IN
关系将每部电影与其演员联系起来。无需使用DISTINCT
,因为AVG
子句中的aggregating function WITH
会自动使用不同的m
节点作为分组关键字。
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WITH m, AVG(m.released - p.born) AS averageAge
WHERE averageAge < 40
RETURN m, averageAge