Cypher统计各节点不同关系类型报错,求正确实现方法
解决Neo4j Cypher统计节点不同关系类型数量的问题
错误原因
你写的查询报错是因为Cypher语法不支持RETURN node_id, DISTINCT rel_type这种写法——DISTINCT不能单独修饰单个返回列,它要么放在RETURN开头修饰整行结果,要么在聚合函数(比如count())内部使用。
正确写法示例
1. 获取每个节点的所有不同关系类型(每行一个节点+关系类型列表)
MATCH (n:Department)-[r]-() WITH id(n) AS node_id, type(r) AS rel_type RETURN node_id, collect(DISTINCT rel_type) AS unique_rel_types
如果需要每行显示一个节点的单个关系类型(自动去重),可以这样写:
MATCH (n:Department)-[r]-() RETURN DISTINCT id(n) AS node_id, type(r) AS rel_type
2. 统计每个节点的不同关系类型数量(同时返回具体类型列表)
MATCH (n:Department)-[r]-() RETURN id(n) AS node_id, count(DISTINCT type(r)) AS rel_type_count, collect(DISTINCT type(r)) AS unique_rel_types
或者用WITH先分组去重再统计,效果一致:
MATCH (n:Department)-[r]-() WITH id(n) AS node_id, type(r) AS rel_type RETURN node_id, count(DISTINCT rel_type) AS rel_type_count, collect(DISTINCT rel_type) AS unique_rel_types
说明
count(DISTINCT type(r))会对每个节点的关系类型去重后统计数量collect(DISTINCT rel_type)会把每个节点的所有不同关系类型收集成一个列表,方便查看具体类型
内容的提问来源于stack exchange,提问作者Jonathan Livni
相关产品推荐
相关产品推荐

