如何续写Cypher查询,返回Criterion对应的Skill及各去重Skill的计数
完整Cypher查询续写方案
你可以通过分组统计来实现需求,以下是续写后的完整查询:
MATCH (c:Criterion {id: 24}) OPTIONAL MATCH (c)<-[:HAS_VOTE_ON]-(d:Decision)-[:HAS_VOTE_ON]->(s:Skill) WHERE s.id <> c.id WITH c, s, d GROUP BY c, s RETURN c AS targetCriterion, s AS relatedSkill, COUNT(d) AS voteCount
核心逻辑说明:
GROUP BY c, s:按目标Criterion(c)和关联的Skill(s)分组,确保每个不同的Skill与目标Criterion的组合单独成组,避免重复统计COUNT(d) AS voteCount:统计每组中关联的Decision节点数量,也就是该Skill和目标Criterion通过投票决策建立关联的次数- 由于使用了
OPTIONAL MATCH,如果目标Criterion没有匹配到任何符合条件的Skill,relatedSkill会返回null,对应的voteCount为0
如果不需要保留无匹配Skill的结果,可将OPTIONAL MATCH替换为MATCH,简化查询:
MATCH (c:Criterion {id: 24}) MATCH (c)<-[:HAS_VOTE_ON]-(d:Decision)-[:HAS_VOTE_ON]->(s:Skill) WHERE s.id <> c.id WITH c, s GROUP BY c, s RETURN c AS targetCriterion, s AS relatedSkill, COUNT(*) AS voteCount
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

