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绕过联合的聚合_Neo4j_Cypher - Fatal编程技术网

neo4j绕过联合的聚合

neo4j绕过联合的聚合,neo4j,cypher,Neo4j,Cypher,为了练习一下Cypher,我制作了一个简单的例子,让学生与参加某些课程的其他学生成为朋友 现在我想了解班级如何有助于结交来自不同城镇的朋友,因此,我需要计算有多少来自不同城镇的学生因为友谊或因为他们参加同一个班级而相遇 通常,我会通过计算每对(p1.town,p2.town)的出现次数来汇总以下并集的结果。 匹配(p1:个人)-[:朋友]->(p2:个人) 其中p1.id p2.id 和p1.town p2.town 返回p1.town,p2.town 联合所有 匹配(第一季度:人)(第二季度

为了练习一下Cypher,我制作了一个简单的例子,让学生与参加某些课程的其他学生成为朋友

现在我想了解班级如何有助于结交来自不同城镇的朋友,因此,我需要计算有多少来自不同城镇的学生因为友谊或因为他们参加同一个班级而相遇

通常,我会通过计算每对(p1.town,p2.town)的出现次数来汇总以下并集的结果。

匹配(p1:个人)-[:朋友]->(p2:个人)
其中p1.id p2.id
和p1.town p2.town
返回p1.town,p2.town
联合所有
匹配(第一季度:人)(第二季度:人)
其中q1.id q2.id
和q1.城镇q2.城镇
返回p1.town,p2.town
但是,不幸的是,通过联合聚合是Neo4J(和Cypher)没有的特性

有人知道如何重写查询吗


干杯。

我不太明白您到底想要什么,但一般来说,您有时可以使用
WITH
来分割查询,从而避免
联合。只需确保收集第一个子查询的所有结果,以便在第二个子查询开始时只有一个结果项(或者第二个子查询将为每个结果项运行一次)

匹配(p1:Person)-[:FRIEND\u OF]->(p2:Person)
p1.id p2.id//需要在哪里?你的人是自己的朋友吗?
和p1.town p2.town
以COLLECT([p1.town,p2.town])作为好友对
匹配(第一季度:人)(第二季度:人)
其中q1.id q2.id//可能也没有必要,除非a:school班级可以有两个:由与同一个人的关系组成
和q1.城镇q2.城镇
以同学对的形式返回对方付费([p1.town,p2.town])
就像我说的,我不确定你想对结果做什么计算。如果你能在联盟上聚合,它会是什么样子?看起来您希望为任何两个朋友或属于同一学校班级的人(这两个查询的联合)获取person.town对,在这种情况下,您可以执行以下操作

MATCH (p:Person), (q:Person)
WHERE p-[:FRIEND_OF]->q OR p<-[:COMPOSED_BY]-(:SchoolClass)-[:COMPOSED_BY]->(q)
RETURN p.town, q.town
匹配(p:Person),(q:Person)
其中p-[:FRIEND\u]->q或p(q)
返回p.town,q.town

我希望我没有完全误解。

对不起,我的问题可能不是很清楚:我想统计来自不同城镇的互动人群,所以,在两次联合后,我想写一些类似的东西:
返回城镇1,城镇2,计数(*)
。你最后的清单解决了我的问题!非常感谢!
MATCH (p:Person), (q:Person)
WHERE p-[:FRIEND_OF]->q OR p<-[:COMPOSED_BY]-(:SchoolClass)-[:COMPOSED_BY]->(q)
RETURN p.town, q.town