2017-09-04 4 views
1

이것이 가능한지 알고 싶습니다. 두 개의 다른 노드를 통해 두 엔티티 간의 관계를 보여주는 멋진 보고서를 생성하는 쿼리가 있습니다. 둘 이상의 경로가있을 수 있습니다. 이제는이 두 노드 사이에 직접적인 관계를 만들고 그 사이의 노드에있는 데이터를 기반으로 경로 및 합계 수를 계산하려고합니다. 보고서 쿼리는 아래와 같습니다.Cypher에서 쿼리를 사용하여 속성으로 관계 만들기

match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg) 
where sol.currStatus='Awarded' 
return bo.AgencyName, count(sol.Number) as awards, so.orgName, sum(prop.finalPrice) as awardVolume; 

내가하고 싶은 일은 효과가 없을 것입니다.

match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg) 
where sol.currStatus='Awarded' 
create (bo)-[:HAS_AWARDED{awardCount: count(sol.Number), awardVolume: sum(prop.finalPrice)}]->(so); 

관계에 대한 속성을 제거하면 작동하지만 많은 프로그래밍 작업없이 속성을 추가하려고합니다.

Neo4j 3.2의 최신 버전을 사용하고 있습니다.

감사

답변

1

여기에서의 문제는 잘못된 상황에서 count()sum() 기능을 사용하려고합니다. 아래 쿼리가 작동합니다 :

match (bo:BuyerAgency)<-[:IS_FOR_BO]-(sol:Solicitation)-[:SELECTED]->(prop:Proposal)<-[:OWNS_BID]-(so:VendorOrg) 
where sol.currStatus='Awarded' 
with bo, so, count(sol.Number) as count_sol, sum(prop.finalPrice) as sum_finalPrice 
create (bo)-[:HAS_AWARDED{awardCount: count_sol, awardVolume: sum_finalPrice}]->(so); 

이 쿼리는 bo, so 및 집계 기능은 다음 상황에 count(sol.Number)sum(prop.finalPrice)의 결과를 전달하는 WITH를 사용합니다. 그런 다음이 값을 사용하여 boso 사이에 새 관계를 만듭니다.

+0

감사합니다. 내가 추측하는 하위 쿼리를 배워야합니다. –

+0

안녕하세요 @ArthurJohnson, 여러분 환영합니다! 이 답변으로 문제가 해결되면 체크 표시를 클릭하여 [수락] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)을 고려하십시오. 이는 해결책을 찾았고 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. 감사! :) –