You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j movies数据集查询:最多演员电影及合作最多演员对查询方法

Neo4j Movies数据集两类查询实现方案

默认使用Neo4j官方提供的Movies示例数据集,实体标签、关系类型和官方默认定义一致:人物标签为Person,电影标签为Movie,演员参演电影的关系类型为ACTED_IN。


需求1:查找参演演员数量最多的电影

实现思路:匹配所有演员和参演电影的关联关系,按电影分组统计关联的演员总数,按统计值倒序排序后取最高值即可。

基础版(仅取1条最高记录)

适合快速验证查询逻辑,忽略并列第一的情况:

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
WITH movie, count(actor) AS actor_count
ORDER BY actor_count DESC
LIMIT 1
RETURN movie.title AS 电影名称, actor_count AS 参演演员数量

兼容并列版(返回所有并列最高的电影)

如果有多部电影参演演员数相同且都是最高,会全部返回:

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
WITH movie, count(actor) AS actor_count
// 先收集所有电影的统计结果,同时算出最大参演人数
WITH collect({title: movie.title, count: actor_count}) AS all_movie_stats, max(actor_count) AS max_actor_count
// 筛选出所有参演人数等于最大值的电影
UNWIND [item IN all_movie_stats WHERE item.count = max_actor_count] AS top_movie
RETURN top_movie.title AS 电影名称, top_movie.count AS 参演演员数量

需求2:查找共同参演电影数量最多的演员组合

实现思路:匹配两个演员共同参演同一部电影的关系,通过id(a1) < id(a2)的条件避免重复配对(不会同时出现「A和B」「B和A」两组相同结果,也排除了演员自己和自己配对的无效数据),按演员组合分组统计共同参演的电影总数,取统计值最高的组合即可。

基础版(仅取1组最高记录)

MATCH (a1:Person)-[:ACTED_IN]->(movie:Movie)<-[:ACTED_IN]-(a2:Person)
WHERE id(a1) < id(a2)
WITH a1.name AS 演员1, a2.name AS 演员2, count(movie) AS 共同参演电影数
ORDER BY 共同参演电影数 DESC
LIMIT 1
RETURN 演员1, 演员2, 共同参演电影数

兼容并列版(返回所有并列最高的演员组合)

MATCH (a1:Person)-[:ACTED_IN]->(movie:Movie)<-[:ACTED_IN]-(a2:Person)
WHERE id(a1) < id(a2)
WITH a1.name AS actor1, a2.name AS actor2, count(movie) AS co_count
WITH collect({a1: actor1, a2: actor2, count: co_count}) AS all_pair_stats, max(co_count) AS max_co_count
UNWIND [pair IN all_pair_stats WHERE pair.count = max_co_count] AS top_pair
RETURN top_pair.a1 AS 演员1, top_pair.a2 AS 演员2, top_pair.count AS 共同参演电影数

小提示:如果需要同时返回两人共同参演的具体电影列表,可在分组统计时新增collect(movie.title)属性存储电影名列表。


内容的提问来源于stack exchange,提问作者william nguma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:00