2013-07-31 4 views
1

일치하는 각 경로에서 가중치의 합을 얻으려고합니다. 쿼리는 다음과 같습니다 :경로의 관계 속성 집계

START n=node(10200) 
MATCH p=(n)-[r*1..5]->(m:Facility) 
WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum 
WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) 
RETURN p AS paths, length(p) AS pc, 
(weight_sum/(length(p) * (length(p)/2))) AS sp; 

나는 그것을 실행할 때마다, 나는군요 ...

Unknown identifier `p` 

내가 제거하면 내 라인 (그리고 weight_sum 반환 값)으로, 쿼리가 무엇을 알고 ' p '가 정상적으로 실행됩니다. 'p'의 값이 손실되었다는 쿼리에 문제가 있습니까? 이 관계 속성의 SUM을 얻는 더 좋은 방법이 있습니까?

답변

4

할 수 있습니다 단지 파이프 WITH 통해 쿼리의 다음 부분에 "P"

START n=node(10200) 
MATCH p=(n)-[r*1..5]->(m:Facility) 
WITH REDUCE(weights=0, rel IN r : weights + rel.weight) AS weight_sum, p 
WHERE ALL(n in nodes(p) WHERE 1=length(filter(m in nodes(p) : m=n))) 
RETURN p AS paths, length(p) AS pc, 
(weight_sum/(length(p) * (length(p)/2))) AS sp; 
+0

감사합니다! 내가 p, n, r, m이 아닌 이유가 있나요? – Vinnie

+0

r은 WITH 뒤에 사용되지 않으므로이를 전달할 필요가 없습니다. m 및 n은 실제로 WITH를 다시 ​​정의하므로 쿼리의 이전 부분에서 실제로 전달되지 않습니다. 당신은 단지 p와 weight_sum을 사용하기 때문에 충분합니다. – Luanne