2013-04-17 2 views
1

쿼리 중에 데이터를 집계 한 다음이 데이터로 정렬해야합니다. 사이퍼 문서에 따르면
집계 별 사이퍼 순서

:

당신이 당신의 결과 집합을 정렬 집계를 사용하려면
는 집계는 RETURN에 포함되어야합니다은 BY 주문 에 사용합니다. 위의 쿼리가 잘 작동

START profile=node(31) MATCH (profile)-[r:ROLE]->(story) 
WHERE r.role="LEADER" and story.status="PRIVATE" 
WITH story MATCH (story)<-[r?:RATED]-() 
RETURN distinct story ,sum(r.rate) as rate ORDER BY rate DESCENDING 

는 것은 내 결과 집합에 합 (r.rate)을 포함해야합니다 있습니다 :

나는 다음 사이퍼 쿼리가 있습니다.

내가 결과에 포함하지 않고 집계 함수에 의해 순서를 사용할 수
나는 (내 저장소 CypherDslRepository를 확장) 응답을 quering하는 이야기 목록/페이지해야 할 때 저장소를 통해 Cypherdsl을 사용하고

... 세트?
그 해결 방법은 무엇입니까?

감사합니다.

답변

4

당신은 중간`WITH``

START profile=node(31) MATCH (profile)-[r:ROLE]->(story) 
WHERE r.role="LEADER" and story.status="PRIVATE" 
WITH story 
MATCH (story)<-[r?:RATED]-() 
WITH story ,sum(r.rate) as rate 
ORDER BY rate DESCENDING 
RETURN story 

와 함께 할 그리고 당신은 이미 집계가있는 경우 DISTINCT을 남길 수 있습니다.

선택적 관계가 느리므로 perf 문제가 발생하면 경로 식을 사용하고 거기에서 rel을 가져옵니다.

START profile=node(31) MATCH (profile)-[r:ROLE]->(story) 
WHERE r.role="LEADER" and story.status="PRIVATE" 
with story, extract(p in (story)<-[r?:RATED]-() : head(rels(p)) as rated 
WITH story , reduce(sum = 0, r in rated : sum + r.rate) as rate 
ORDER BY rate DESCENDING 
RETURN story 
+1

안녕하세요. 마이클이 응답 해 주셔서 감사합니다 ... 님과 함께 주문을 허용하지 않습니다. (WithNext 클래스에는 메서드가 없습니다. 주문 ..) 제안 사항이 있으십니까? –