[英]Neo4J averaging numeric property over several nodes
我有一張大圖,而Neo4J恰好兩天,即zilch。
我想計算具有一定數值屬性的所有節點上的平均值,只要它出現在節點(n)
就說n.prop_01
。 然后,我想獲取其節點的n.prop_01
屬性低於平均值的節點,具體取決於平均值。
我在文檔或在線論壇上找不到答案或啟發性的內容。 我嘗試了以下內容以及更多...
MATCH (n) WHERE exists(n.prop_01)
WITH n, collect(n.prop_01) AS all_prop_01
UNWIND all_prop_01 as all_prop
WITH n,prop_01,avg(all_prop) AS avg_prop
WHERE n.prop_01 < (1.1*avg_prop)
RETURN n.name,n.prop_01 LIMIT 20;
結果:( (no changes, no records)
。
感謝您提出任何指示,說明為什么這種方式不起作用以及如何使其起作用。
您需要先計算平均值,然后進行過濾,否則展開時,平均值等於每個節點的屬性:
MATCH (n) WHERE exists(n.prop_01)
WITH avg(n.prop_01) as avg_prop
MATCH (n) WHERE exists(n.prop_01) AND n.prop_01 < 1.1 * avg_prop
RETURN count(n), avg_prop
將節點與prop_01
匹配時,可以計算上游的平均值。
您還應該考慮在匹配項中添加標簽,以減少查詢需要瀏覽的節點數。
您還可以收集n
節點,而不僅僅是prop_01
,然后在展開時使用它。
MATCH (n:Add_A_Node_Label_Here)
WHERE exists(n.prop_01)
WITH collect(n) AS all_n, avg(n.prop_01) as avg_prop
UNWIND all_n as n
WITH n, avg_prop
WHERE n.prop_01 < (1.1 * avg_prop)
RETURN n.name, n.prop_01
LIMIT 20;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.