找到最常见的财产 - 密码

时间:2016-05-09 13:27:49

标签: neo4j cypher

有没有办法可以使用cypher派生特定节点类型的最常见(和第二常见)属性值?

目前我正在确定该属性的不同值:

MATCH(a:Label1)-[r:REL]->(b:Label2) RETURN DISTINCT b.prop; 

然后单独计算它们:

MATCH(a:Label1)-[r:REL]->(b:Label2) WHERE b.prop = "x" RETURN COUNT(x); 

任何帮助将不胜感激,我使用的是Neo4j 3.0.0。

我不确定如何组合这些查询。

3 个答案:

答案 0 :(得分:6)

这很简单:

MATCH (a:Label1)-[r:REL]->(b:Label2)
RETURN b.prop, count(*) as occurences
ORDER BY occurences DESC
LIMIT 2

您可以在此处阅读有关自动汇总的信息:http://neo4j.com/docs/stable/query-aggregation.html

答案 1 :(得分:3)

您可以使用keys()函数从每个匹配节点获取属性。这将返回该节点的键集合。展开集合并聚合所有匹配节点中每个属性的计数。

MATCH (a:Label1)-[r:REL]->(b:Label2)
UNWIND keys(b) as prop
RETURN prop, count(*) as num_props
ORDER BY num_props desc

答案 2 :(得分:1)

//
// Get patterns
MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Pass through all keys
UNWIND KEYS(b) as key
   //
   // Get patterns again
   MATCH (a:Label1)-[r:REL]->(b:Label2)
//
// Aggregating by title of the properties and its content
RETURN key as propName, b[key] as propValue, count(b[key]) as propRank
//
// Sort the largest property-value pairs first
ORDER BY propRank DESC