2016-08-08 45 views
0

我有以下查詢:的Neo4j /暗號 - 多WHERE子句返回任何結果

這一個返回預期的結果:

MATCH (u:User)-[pw_rel:PAYED_WITH]->(ext_acc:ExtAccount) 
WHERE pw_rel.processed_at > 0 
WITH u, COUNT(DISTINCT ext_acc) as accs 
WHERE accs > 2 
RETURN u 

雖然這一個不返回任何東西:

MATCH (u:User)-[pw_rel:PAYED_WITH]->(ext_acc:ExtAccount) 
WITH u, pw_rel, ext_acc, COUNT(DISTINCT ext_acc) as accs 
WHERE pw_rel.processed_at > 0 AND accs > 2 
RETURN u 

這是爲什麼?我錯過了什麼?

回答

1

這與聚合有關,以及它在其他列的上下文中的含義。也就是說,存在的其他非聚合列充當分組密鑰。

在您的第一個查詢中,您唯一的分組鍵是u。這意味着您的輸出是每個用戶的所有分機帳戶的計數。

在您的第二個查詢中,您的分組鍵包括u,pw_rel,ext_acc。因此,它會爲每個用戶/ pw-rel/ext_acc組合(或行)返回所有ext賬戶的計數。這不是很有幫助,因爲每行可能會返回一個計數,所以沒有行會傳遞您的WHERE子句的數量大於2.即使您刪除了WITH中的ext_acc列, pw-rel列仍將您限制爲1(因爲每個用戶只有一個ext_acc/pw_rel)。

應該很容易看出其他列會修改聚合函數分組的內容以及您將返回的列。

計數(ext_acc) - 所有分機的總數佔

U,計數(ext_acc) - 用戶,並且每個用戶

分機帳戶U,pw_rel,計數(ext_acc)的計數 - 用戶,關係支付,以及每個用戶的所有外部賬戶的計數和來自該用戶的支付關係

u,pw_rel,ext_acc,count(ext_acc) - 用戶,支付關係,分機賬戶和每個用戶的所有外部賬戶的數量以及該用戶與特定分機賬戶的關係。

+0

感謝您的解釋! – lxngxr