Neo4j Cypher查询如何返回外籍球员数量最多的所有俱乐部
Cypher查询获取外籍球员数量最多的所有俱乐部
问题说明
你需要返回俱乐部所在国家与球员国家队所属国家不一致的球员数量最多的所有俱乐部,原有查询使用LIMIT 1只能返回单条结果,自行编写的二次MATCH方案虽然可用,但存在重复扫描数据的性能损耗。
优化查询方案(仅扫描一次数据,性能更优)
MATCH (c: Club)<-[:PLAYS_FOR]-(p: Player)-[:REPRESENTS]->(n: NationalTeam) WHERE c.country <> n.country // 先统计每个俱乐部符合要求的外籍球员数量 WITH c, collect(p.name) AS list_players, n.country AS country, size(collect(p.name)) AS size // 聚合所有俱乐部统计结果同时计算最大外籍球员数 WITH collect({club: c, players: list_players, country: country, size: size}) AS club_stats, max(size) AS max_size // 拆分聚合结果筛选出所有达到最大值的俱乐部 UNWIND club_stats AS stat WHERE stat.size = max_size RETURN stat.club AS c, stat.players AS list_players, stat.country AS country, stat.size AS size
方案说明
- 无需重复执行MATCH扫描节点与关系,仅一次计算即可拿到所有符合要求的结果,相比二次MATCH的写法性能提升明显,尤其在数据量大的场景下优势更突出
- 逻辑与你的原始统计规则完全对齐,保证结果一致性
内容的提问来源于stack exchange,提问作者crazyfrog
相关产品推荐
相关产品推荐

