Neo4j Cypher如何计算关系属性的百分比



场景如下:我有三种类型的节点。一次讲座与N次考试有关。每个考试都与X名学生相连。考试和学生之间的关系具有一种性质,即True或False。我的目标是为每节课返回属性值为True的关系的百分比。

我当前的查询是:

match(n:Exam)-[r:FROM]-(v:Lecture)
optional match (n)-[r2:WHO]-(s:Student)
return v.name,  count(r2) order by count(r2) desc

其返回每个讲座的学生和考试之间的关系的计数。

基本上,我想要的是将这两个查询组合起来计算百分比:

match(n:Exam)-[r:FROM]-(v:Lecture)
optional match (n)-[r2:WHO]-(s:Student)
return v.name,  count(r2) order by count(r2) desc

match(n:Exam)-[r:FROM]-(v:Lecture)
optional match (n)-[r2:WHO]-(s:Student)
where r2.PROPERTY = True
return v.name,  count(r2) order by count(r2) desc

有人能帮我做到这一点吗?我还没能做到这一点,每次我试图将这两个查询组合在一起时,我要么得到总额,要么得到PROPERTY=True的金额,但永远不会两者都得到。在SQL中,我只需使用两个查询并将它们合并为一个查询,但我不知道如何在密码中做到这一点。

谢谢:(

如果我正确理解您的数据模型,它是这样的:

(:Student)-[:WHO]-(:Exam)-[:FROM]-(:Lecture)
So, for your query, perhaps you could do something like this:
MATCH p=(:Student)-[r:WHO]-(:Exam)-[:FROM]-(v:Lecture) //we want the path of Student to Lecture
WHERE r.PROPERTY=True
RETURN v.name AS Name, count(r) AS Score ORDER BY Score DESC

我会做一个节点,如果知道的话,总是在查询中包括关系方向,它们会加快的性能

最新更新