2013-08-26 35 views
1

我有以下查詢:暗號 - 如何通過開展變量與管

START e1=node:event(prop="0") 
MATCH e1-[r:rbel]->e2 
WITH e1, e2, count(e1) as ecount 
MATCH e1-[:redge]->p<-[:redge]-e2 
WITH p.element_type as Type, p.label as Label, (count(p)*100./ecount) as percentage 
WHERE percentage > 20 
RETURN Type, Label, ROUND(percentage) as Percentage 

我試圖計算指定模式在事件發生與prop="0"次數的百分比,在這些事件中發生的所有模式。

我收到以下錯誤:Unknown identifier 'ecount'

所以我在計算替代ecountcount(ecount),並不斷取得percentage S的100%,我不知道是真的。

我是否在談論這個錯誤?如何將ecount的值傳遞給WITH子句並將其用於計算?

任何幫助表示讚賞!

+0

您使用的是哪個版本的Neo4j? –

+0

community-1.9.2-unix – zanbri

回答

3

此查詢是否適合您?每當我將e1count(e1)合併到WITH聲明中時,count(e1)始終爲1.我認爲這是因爲當您選擇e1時,count(e1)聚合也不再起作用。您可以忽略e1count(e1)

START e1=node:event(prop="0") 
MATCH e1-[r:rbel]->e2 
WITH e1, e2 
MATCH e1-[:redge]->p<-[:redge]-e2 
WITH p.element_type as Type, p.label as Label, (count(p)*100./count(e1)) as percentage 
WHERE percentage > 20 
RETURN Type, Label, ROUND(percentage) as Percentage 

UPDATE 與您提供的控制檯設置玩弄後,我得到了下面的查詢工作:

START e1=node:node_auto_index(prop="0") 
MATCH e1-[r:rbel]->e2 
WITH COLLECT(e2) AS e2collection, count(e1) AS cnt 
MATCH e1-[:redge]->p<-[:redge]-(e2) 
WITH p, COLLECT(e1) AS e1collection, cnt, e2collection 
WITH p.name AS Name, cnt, count(p)*100/cnt AS Percentage 
WHERE Percentage > 20 
RETURN Name, Percentage 
+0

這仍然給我100%的結果每次.. – zanbri

+2

您的模式匹配器總是選擇三角形關係。我在控制檯上創建了一個測試數據集:http://console.neo4j.org/?id=wxx099使用計數器聚合其他節點的結果總是爲2,如下所示:http://console.neo4j.org /?id = qsvane所以這個計算基本上是正確的,即使它不是你想要實現的:http://console.neo4j.org/?id=ekxwmu你能否描述你的目標比較清楚,包括一個控制檯樣本數據結構如果可能? – h3nrik

+0

我最初想計算有多少節點適合我的第一次匹配:http://console.neo4j.org/r/yt15uw(我創建了一個稍微不同的圖,它與我的用例更相似)。這裏返回3.然後我想要這個:http://console.neo4j.org/r/5yfaov。這返回我期望的結果:33%。但是,我必須在計算中手動插入'3'。我認爲你的建議是這樣的:http://console.neo4j.org/r/6bz813,它一直給我100%的結果,這是錯誤的。你知道如何將'3'作爲變量嗎?非常感謝您的幫助! – zanbri

1

h3nrik的解決方案在下面的控制檯設置示例完美工作,但是,由於某種原因,應用於我的本地主機數據瀏覽器中的實際數據時失敗。儘管查詢時間較慢,但我發現了以下解決方法:

START e1=node:event(prop="0") 
MATCH e1-[:rbel]->e2 
WITH count(e1) as ecount 
START e1=node:event(prop="0") 
MATCH e1-[:rbel]->e2, e1-[:redge]->p<-[:redge]-(e2) 
WITH p.label AS Label, p.element_type as Type, ecount, count(p)*100./ecount AS percentage 
WHERE percentage > 20 
RETURN Label, Type, ROUND(percentage) as Percentage