2016-11-14 39 views
0

我想在密碼中創建一個all in one語句來填充數據表。兩個字段數數Sample:一個顯示的總數,而另一幅表現沒有附加: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) 

問題是de拿出相同的值,在現實中e時應該小於d。我懷疑以某種方式de指向相同的地址。我可以通過MATCH再次查詢圖表來解決問題,但顯然這很昂貴,我寧願只做一次。可能嗎?

回答

2

WHERE過濾WITH返回的內容,只有非Ghost節點。使用CASE的條件,而不是結果:

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

你也collect的結果,不同的樣品節點,然後獲取原始列表和過濾列表的大小(這樣就不會去重複兩次):

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