2017-09-04 108 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); 

此查詢使用WITH通過boso和聚集功能count(sol.Number)sum(prop.finalPrice)下一個背景下的結果。之後,這些值用於創建boso之間的新關係。

+0

謝謝,這工作。我需要學習我猜的子查詢。 –

+0

嗨@阿瑟約翰遜,歡迎您!如果此答案已解決您的問題,請通過單擊複選標記考慮[接受](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。謝謝! :) –

相關問題