2016-08-08 2 views
0

I가 다음 쿼리 :Neo4j/사이퍼 - 여러 조항이 어떤 결과를 반환하지

이 하나가 예상 된 결과 반환

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 
이 하나가 아무것도 반환하지 않지만

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 

왜 그럴까요? 내가 뭘 놓치고 있니?

답변

1

이것은 집계와 다른 열의 컨텍스트에서의 의미와 관련이 있습니다. 즉, 다른 비 집합 열이 그룹화 키 역할을합니다.

첫 번째 쿼리에서 유일한 그룹화 키는 u입니다. 즉, 출력은 각 사용자에 대한 모든 확장 계정의 수입니다.

두 번째 쿼리에서 그룹화 키에는 u, pw_rel, ext_acc가 포함됩니다. 따라서 각 사용자/pw-rel/ext_acc 조합 (또는 행)에 대한 모든 ext 계정 수를 반환합니다. 그게별로 도움이되지 않습니다, 당신은 가능성이있어 각각의 행에 하나의 카운트를 되찾아, 그래서 당신의 WHERE 절이> 2가 될 행이 없습니다. 당신이 WITH에서 ext_acc 컬럼을 제거했다 할지라도, pw-rel 열은 여전히 ​​사용자 수 (1 인당 1 개의 ext_acc/pw_rel이 있기 때문에)를 1로 제한합니다.

다른 열은 그룹화 함수가 그룹화하는 것과 열을 다시 수정한다는 것을 쉽게 알아야합니다.

수 (ext_acc) - 사용자 및 유, pw_rel는, 계산 사용자

당 내선 계정 (ext_acc)의 수 - 모든 내선의 총 수는

U, 계산 (ext_acc를) 계정 - 사용자, 유료 관계 및 해당 사용자의 모든 외부 계정 수 및 해당 사용자와의 지불 관계

u, pw_rel, ext_acc, count (ext_acc) - 사용자, 지불 관계, ext 계정 및 사용자 당 모든 외부 계정 수와 해당 사용자로부터 특정 ext 계정에 대한 지불 관계.

+0

설명해 주셔서 감사합니다. – lxngxr

관련 문제