2017-09-04 81 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)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。谢谢! :) –

相关问题