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

问题描述 投票:0回答:1

方案如下:我有三种类型的节点。讲座与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中,我将只使用两个查询并将它们组合为一个查询,但是我不知道如何在密码中执行此操作。

谢谢:)

neo4j cypher
1个回答
0
投票

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

(: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

我会创建一个节点,如果知道的话,总是在您的查询中包含关系方向,它们将提高性能

© www.soinside.com 2019 - 2024. All rights reserved.