Cypher 请求获取在大多数电影中扮演的演员,按数量排序
Posted
技术标签:
【中文标题】Cypher 请求获取在大多数电影中扮演的演员,按数量排序【英文标题】:Cypher request to get actors who played in most movies, order by count 【发布时间】:2018-06-15 09:00:23 【问题描述】:我正在尝试关注有关 neo4j 的视频教程,该视频教程使用默认在 neo4j 中找到的电影图形数据库。
在本教程中有一个任务要求检索在大多数电影中扮演的演员,按计数 DESC 排序并限制为 5。
教程解决方案与我的结果不匹配,并且有一些我不明白的地方。当我使用类似的 Cypher 请求时,我的结果得到了重复的电影。
教程解决方案:
MATCH (actor:Person)-[:ACTED_IN]-() RETURN actor.name, COUNT(*) as COUNT ORDER BY COUNT DESC LIMIT 5;
在我的解决方案中,我得到了重复:
MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie) RETURN actor.name, COLLECT(movie.title), COUNT(*) as COUNT ORDER BY COUNT DESC LIMIT 5;
“梅格瑞恩”[“壮志凌云”,“你有邮件”,“西雅图不眠之夜”,“乔与火山”,“当哈利遇到莎莉”,“***枪”、“你有邮件”、“西雅图不眠之夜”、“乔与火山”、“当哈利遇到莎莉”、“壮志凌云”、“你有邮件” 、《西雅图夜未眠》、《乔与火山》、《当哈利遇到莎莉》]
当我使用时:
MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie) RETURN actor.name,COLLECT(DISTINCT movie.title), COUNT(*) as COUNT ORDER按计数 DESC 限制 5;
我获得了与教程解决方案相同的电影,但 COUNT 列仍显示重复的电影 COUNT。
【问题讨论】:
【参考方案1】:我在教程中遇到了类似的问题 - 使用 Cypher CREATE 语句多次添加相同的节点非常容易。也许这也发生在你身上?
也许只是运行:
MATCH(n) 返回 n;
然后观察整个图表 - 教程应该足够小,您会看到是否有重复。
【讨论】:
嗨,邪恶的。我没有添加任何 CREATE 语句......我什至重新启动了 neo4j juste 的新会话以确保。仅当我使用 COUNT(DISTINCT movie.title) 时,我得到与教程相同的结果,而教程不使用任何 DISTINCT 语句。【参考方案2】:您可以在count
中使用distinct
:
MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie)
RETURN
actor.name,
COLLECT(DISTINCT movie.title),
COUNT(DISTINCT movie) as COUNT
ORDER BY COUNT DESC LIMIT 5;
附:在这种情况下,COUNT(*)
的结果是模式计数。
【讨论】:
以上是关于Cypher 请求获取在大多数电影中扮演的演员,按数量排序的主要内容,如果未能解决你的问题,请参考以下文章
数据库关系代数:如何找到在“环球影城”制作的所有电影中扮演过角色的演员?