2017-05-25 92 views
0

我在我的Neo4j图表上做了一些分析,并知道我正陷入另一个问题。 我的工作查询如下:计算介于中心性和显示百分比

MATCH p=allShortestPaths((source:Person)-[:KNOWS*]-(target:Person)) 
WHERE id(source) < id(target) and length(p) > 1 
UNWIND nodes(p)[1..-1] AS n 
RETURN n.id AS id, n.firstname AS firstname, n.lastname AS lastname, count(*) as betweenness 
ORDER BY betweenness DESC 

这个工作正常,给我这样一个列表:

result betweenness

到目前为止,一切都很好。但是现在我想有一个额外的列,其中显示了基于所有最短路径的百分比值。 从来就试图简单地添加100.0 * SUM(betweenness)/count(p) AS percent但这会导致错误可变betweenness没有定义(4号线,列119(偏移:267))

如果有人知道如何处理这个问题,请你告诉我。)

在此先感谢,欢呼!

回答

0

使用WITH

  • p和其他属性使用WITH下一个背景。
  • betweenness计算percent并全部返回。

试试:

MATCH p=allShortestPaths((source:Person)-[:KNOWS*]-(target:Person)) 
WHERE id(source) < id(target) and length(p) > 1 
UNWIND nodes(p)[1..-1] AS n 
WITH p, n.id AS id, n.firstname AS firstname, n.lastname AS lastname, count(*) as betweenness 
RETURN id, firstname, lastname, betweenness, 100.0 * SUM(betweenness)/count(p) AS percent 
ORDER BY betweenness DESC 
+0

确定..从来就测试了这个查询,但后来我的中介因子是“1”,所有节点和比例因子是“100” – Andy

+0

嗯..尝试:MATCH p = allShortestPaths((source:Person) - [:KNOWS *] - (target:Person)) WHERE id(source) 1 UNWIND nodes )[1 ..- 1] AS n WITH count(p)as countP,n.id AS id,n.firstname AS firstname,n.lastname AS lastname,count(*)as between RETURN id,firstname,lastname ,betweenness,100.0 * SUM(介于)/ countP AS percen t ORDER BY betweenness DESC'如果有效,我会编辑我的答案。 –