【问题标题】:Neo4j Cypher how to compute percentage of a relations attributeNeo4j Cypher 如何计算关系属性的百分比
【发布时间】:2019-10-27 17:00:02
【问题描述】:

场景如下: 我有三种类型的节点。一次讲座与 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 中,我会简单地使用两个查询并将它们组合成一个,但我不知道如何在 cypher 中执行此操作。

谢谢:)

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

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

    我会创建一个节点,如果已知,请始终在您的查询中包含关系方向,它们将加快性能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多