如何实现1:N:1与N:1:N模式的计数?现有查询未达预期
解决1:N:1和N:1:N模式计数问题
原查询存在两个核心问题:
- 未按中间节点
v2分组统计,导致计算的是全局范围内的v1、v3属性数量,而非每个v2对应的左右节点属性分布 WITH子句后直接使用WHERE不符合Cypher执行逻辑,筛选条件应在分组后针对每组数据生效
正确查询语句
要统计符合1:N:1和N:1:N模式的v2节点数量,需先按单个v2分组,统计其关联的左右属性数量,再筛选符合条件的节点:
MATCH (v1)-[e1]->(v2)-[e2]->(v3) WITH v2, COUNT(DISTINCT v1.property) AS cntLeft, COUNT(DISTINCT v3.property) AS cntRight WHERE (cntLeft = 1 AND cntRight = 1) OR (cntLeft > 1 AND cntRight > 1) RETURN COUNT(v2) AS matchingV2Count
逻辑说明
MATCH匹配三层节点的关联关系WITH按v2分组,统计每个v2对应的不同左节点属性数量和不同右节点属性数量WHERE筛选两种目标模式:- 1:N:1模式:
cntLeft=1且cntRight=1(单个左属性对应多个v2,这些v2均指向单个右属性) - N:1:N模式:
cntLeft>1且cntRight>1(多个左属性指向同一个v2,该v2指向多个右属性)
- 1:N:1模式:
- 最后返回符合条件的
v2节点总数
内容的提问来源于stack exchange,提问作者Juliette Gia
相关产品推荐
相关产品推荐

