【问题标题】:Neo4j/Cypher: Count distinct node combinations that match a patternNeo4j/Cypher:计算匹配模式的不同节点组合
【发布时间】:2019-05-23 14:14:45
【问题描述】:

我在 Neo4j 图中查询路径。该路径包含两个以上的节点。我想计算一个双节点子路径的不同出现。

所以在下面的例子中我想知道结果行的数量:

MATCH ()-->(n1:Label1)-->(n2:Label2)-->()
RETURN DISTINCT n1, n2

例如像

RETURN count(DISTINCT n1, n2)

(适用于单个节点:RETURN count(DISTINCT n1))

如何在 Cypher 中执行此操作?

【问题讨论】:

  • 你能解释一下Label1和Label2吗?示例- 连接到城市节点的人?
  • 一个例子可能是:(:City)<-[:LIVES_IN]-(n1:Person)-[:KNOWS]->(n2:Person)-[:LIVES-IN]->(:City) 我正在寻找一个回答这个问题的查询:有多少唯一的(n1,n2)元组确实存在与上述模式匹配?

标签: neo4j cypher


【解决方案1】:

这样做可以获得每个不同的n1 和n2 组合被找到的次数:

MATCH ()-->(n1:Label1)-->(n2:Label2)-->()
RETURN n1, n2, COUNT(*);

Aggregating functions like COUNT 在相同的WITH 或RETURN 子句中使用非聚合项作为唯一的“分组键”(因此无需使用DISTINCT)。

[更新]

要获得不同的 n1 和 n2 组合的数量,您可以在这个有点 hacky 的查询中聚合两次:

MATCH ()-->(n1:Label1)-->(n2:Label2)-->()
WITH n1, n2, COUNT(*) AS ignored
RETURN COUNT(*) AS nCombos;

【讨论】:

  • 感谢您的建议!此代码 sn-p 为每个唯一的 n1, n2 组合生成一个包含一行的表,并计算 count(*) 列中不同组合的出现次数。但是,我对计算唯一 n1, n2 组合的单个数字感兴趣,因此对您建议中的行数感兴趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多