2016-05-09 11 views
3

私は、特定のノードタイプの最も一般的な(そして2番目に多い)プロパティ値を導出するために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を使用しています、高く評価されるだろう、私はプロパティに異なる値を識別しています現時点では

私は、これらのクエリを結合するかどうかはわかりません。

答えて

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

+0

パーフェクトに、ありがとう - 私は、最も一般的な取得するためDESCを追加しました。 –

+0

ええヘクタールそれ以外の場合は、削除のためにフラグを立てることがしやすいですが、それは –

3

あなたは一致する各ノードからプロパティを取得するにはkeys()機能を使用することができます。これは、そのノードのキーのコレクションを返します。コレクションをリラックスして、一致するすべてのノードaccross各プロパティの数を集計。

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

ああ - 私はプロパティ値ではなく、プロパティキーを参照してください - 申し訳ありません - 貧しい読書私の部分 –

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 
+1

だけではなく、コードのダンプであることの、ユーザーが答えを理解しているので、コメントを追加してください忘れてしまいました。 – AlBlue

+1

@AlBlue問題なし –

関連する問題