Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 不同节点上的Cypher聚合函数,用于评估多个节点的条件_Neo4j_Cypher - Fatal编程技术网

Neo4j 不同节点上的Cypher聚合函数,用于评估多个节点的条件

Neo4j 不同节点上的Cypher聚合函数,用于评估多个节点的条件,neo4j,cypher,Neo4j,Cypher,我有一个特定时间段内Reddit的Neo4j数据库 我从一个特定的子Reddit开始,我们称之为X。从X开始,我将此子Reddit的顶级用户定义为至少有一篇文章的用户,其得分高于此子Reddit上文章的平均得分。 接下来,我想寻找其他子Reddit,其中subreddit X的顶级用户也是顶级用户,但现在基于这些子Reddit的帖子和这些子Reddit上的顶级用户帖子的平均分数 这是我已经拥有的,但不确定如何继续。 我应该如何最好地执行此查询 MATCH (p:Post)-[:Submitted

我有一个特定时间段内Reddit的Neo4j数据库

我从一个特定的子Reddit开始,我们称之为X。从X开始,我将此子Reddit的顶级用户定义为至少有一篇文章的用户,其得分高于此子Reddit上文章的平均得分。 接下来,我想寻找其他子Reddit,其中subreddit X的顶级用户也是顶级用户,但现在基于这些子Reddit的帖子和这些子Reddit上的顶级用户帖子的平均分数

这是我已经拥有的,但不确定如何继续。 我应该如何最好地执行此查询

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...