Neo4j 不同节点上的Cypher聚合函数,用于评估多个节点的条件
我有一个特定时间段内Reddit的Neo4j数据库 我从一个特定的子Reddit开始,我们称之为X。从X开始,我将此子Reddit的顶级用户定义为至少有一篇文章的用户,其得分高于此子Reddit上文章的平均得分。 接下来,我想寻找其他子Reddit,其中subreddit X的顶级用户也是顶级用户,但现在基于这些子Reddit的帖子和这些子Reddit上的顶级用户帖子的平均分数 这是我已经拥有的,但不确定如何继续。 我应该如何最好地执行此查询Neo4j 不同节点上的Cypher聚合函数,用于评估多个节点的条件,neo4j,cypher,Neo4j,Cypher,我有一个特定时间段内Reddit的Neo4j数据库 我从一个特定的子Reddit开始,我们称之为X。从X开始,我将此子Reddit的顶级用户定义为至少有一篇文章的用户,其得分高于此子Reddit上文章的平均得分。 接下来,我想寻找其他子Reddit,其中subreddit X的顶级用户也是顶级用户,但现在基于这些子Reddit的帖子和这些子Reddit上的顶级用户帖子的平均分数 这是我已经拥有的,但不确定如何继续。 我应该如何最好地执行此查询 MATCH (p:Post)-[:Submitted
MATCH (p:Post)-[:Submitted]->(:Subreddit {display_name: 'X'})
WITH avg(toFloat(p.score)) as score_avg
MATCH (u:User)-[:Submitted]->(p:Post)-[:Submitted]->(:Subreddit {display_name: 'X'})
WHERE p.score > score_avg
WITH DISTINCT u as top_users
MATCH (top_users)-[:Submitted]->(:Post)-[:Submitted]->(sub:Subreddit)
WITH sub as top_users_subs
MATCH (p:Post)-[:Submitted]->(top_users_subs)
WITH avg(toFloat(p.score)) as subs_score, top_users_subs
您需要一个子查询,如
apoc.cypher.run
,以避免弄乱您的基数
MATCH (p:Post)-[:Submitted]->(:Subreddit {display_name: 'X'})
WITH avg(toFloat(p.score)) as score_avg
MATCH (u:User)-[:Submitted]->(p:Post)-[:Submitted]->(:Subreddit {display_name: 'X'})
WHERE p.score > score_avg
WITH DISTINCT u as top_users
MATCH (top_users)-[:Submitted]->(:Post)-[:Submitted]->(sub:Subreddit)
// You need to run a subquery to get the average score for each subreddit
CALL apoc.cypher.run("MATCH (p:Post)-[:Submitted]->(s:Subreddit) WHERE s.display_name = $reddit RETURN avg(toFloat(p.score)) as score_avg",{reddit:sub.display_name}) yield value
// now we have top users and we have average score
// You can do whatever you want to now...