neo4j - 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 中,我会简单地使用这两个查询并将它们组合成一个,但我不知道如何在 cypher 中执行此操作。
谢谢 :)
解决方案
如果我正确理解您的数据模型,它是这样的:
(: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
我会创建一个节点,如果已知,请始终在您的查询中包含关系方向,它们将加快性能
推荐阅读
- scala - 在 Play 中保持 SSE 连接的正确方法
- ruby - 如何获得当前和上一个财政年度的红宝石?
- python - 如何在python中使用csv包逐行写入CSV
- compilation - 如何为 Windows 7 创建 COFF 可执行文件(不是库)
- php - 如何通过单击按钮更新一行数据
- java - 我不知道如何设置图片,从本地图书馆选择
- css - 字体真棒背景颜色溢出
- c - 为什么 bits/libc-header-start.h 文件夹包含在 stdio.h 头文件中
- node.js - Python3 flask_socketio 和节点。js 套接字。IO如何正确建立连接?
- html - 是否可以通过页面导航将 XML 拆分为多个 HTML 页面?