2016-11-14 10 views
0

データテーブルを作成するためにcypherで1つのステートメントを作成します。 2つのフィールドがSampleの数を数える:1の合計数を示し、もう一方は、追加:Ghostラベルなしの数を示しています同じクエリ内のneo4jのノードの合計と小計を合計します。

MATCH (a:Person)-[:OWNER]->(b:Project)-[:PROJECT]->(c:Import)-[:IMPORT|:INPUT|:OUTPUT*]->(d:Sample) 
WITH a,b,c,d,d AS e WHERE NOT d:Ghost 
RETURN DISTINCT b.Name,(a.`First Name` + " " + a.`Last Name`),b.Description,b.Date,count(DISTINCT c),count(DISTINCT d),count(DISTINCT e) 

問題は、とき現実には、同じ値を思い付くedあるとedより小さくする必要があります。私は何とかdeが同じアドレスを指していると思われます。私はMATCHでグラフをもう一度問い合わせることで問題を解決することができますが、明らかにそれは高価で、私は一度だけそれをやりたいです。出来ますか?

答えて

2

WHERE返される内容はWITHであり、Ghost以外のノードしか取得できません。

WITH a, b, c, d, 
    CASE 
     WHEN d:Ghost THEN null 
     ELSE d 
    END AS e 

ます。また、結果についてcollect個別のサンプルノードは、その後、元のリストとフィルタされたリストのサイズを取得(それは二回重複排除しません)でした:

代わりに条件付きの結果を得るため CASEを使用します
WITH DISTINCT b.Name AS projectName, 
    (a.`First Name` + " " + a.`Last Name`) AS fullName, 
    b.Description AS projectDescription, 
    b.Date AS projectDate, 
    count(DISTINCT c) AS importCount, 
    collect(DISTINCT d) AS samples 
RETURN projectName, fullName, projectDescription, projectDate, importCount, 
     size(samples) AS sampleCount, 
     size([s IN samples WHERE NOT s:Ghost]) as nonGhostCount 
関連する問題