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

获取多个求和结果最大值:Neo4j Cypher查询问题

解决Neo4j/Cypher查询:找出总受欢迎度最高的厨师

嘿,刚好我熟悉Neo4j和Cypher,这就帮你搞定这个查询问题!

咱们的核心需求是计算每个厨师制作的所有蛋糕的popularity总和,然后找出总和最大的厨师。这里分两种场景给你提供实用的查询语句:

场景1:仅需单个最高总和的厨师(默认无并列)

用排序加限制的方式就能快速拿到结果:

MATCH (chef)-[r:COOKS]->(cake)
WITH chef, SUM(r.popularity) AS total_popularity
ORDER BY total_popularity DESC
LIMIT 1
RETURN chef, total_popularity

给你拆解下每一步逻辑:

  • MATCH (chef)-[r:COOKS]->(cake):匹配所有厨师节点通过COOKS关系连接到蛋糕节点的路径,把关系存为r,方便后续调用它的popularity属性。
  • WITH chef, SUM(r.popularity) AS total_popularity:按厨师节点分组,计算每个厨师所有COOKS关系的popularity总和,给这个总和命名为total_popularity。
  • ORDER BY total_popularity DESC:把结果按总受欢迎度从高到低排序,让排名第一的厨师处于结果首位。
  • LIMIT 1:只取排序后的第一个结果,也就是总受欢迎度最高的厨师。
  • RETURN chef, total_popularity:返回厨师节点和对应的总受欢迎度,方便你核对结果是否符合预期。

场景2:处理多个厨师并列第一的情况

如果存在多个厨师的总受欢迎度相同且都是最大值,上面的语句只会返回一个,这时候可以用下面的查询把所有并列第一的厨师都找出来:

MATCH (chef)-[r:COOKS]->(cake)
WITH chef, SUM(r.popularity) AS total_popularity
WITH COLLECT({chef: chef, total: total_popularity}) AS chef_pop_list, MAX(total_popularity) AS max_total
UNWIND chef_pop_list AS cp
WHERE cp.total = max_total
RETURN cp.chef, cp.total AS total_popularity

这个版本的逻辑更周全:

  1. 先计算每个厨师的总受欢迎度,和第一个查询的前两步一致。
  2. 把所有厨师与对应总受欢迎度收集成一个列表,同时算出所有总和里的最大值max_total。
  3. 展开这个列表,筛选出总受欢迎度等于最大值的条目,最后返回这些厨师和他们的总和。

这样不管是单个还是多个并列第一的情况,都能精准得到你想要的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:46