neo4j - 在 Neo4j 中使用 Cypher 对返回的列中的所有值求和的方法
问题描述
我编写了以下 Cypher 查询来从一组订单中获取某个项目的频率。
MATCH (t:Trans)-[r:CONTAINS]->(i:Item)
WITH i,COUNT(*) AS CNT,size(collect(t)) as NumTransactions
RETURN i.ITEM_ID as item, NumTransactions, NumTransactions/CNT as support
我得到一个这样的表作为我的输出
Item NumTransactions Support
A 2 1
B 1132 1
C 2049 1
等等。我的意思是将每个 NumTransaction 除以事务总数。即整个 num transactions 列的总和,以获得支持,但它自己划分 NumTransactions。有人可以指出正确的功能(如果存在)或这样做的方法吗?
解决方案
这应该有效:
MATCH (:Trans)-[:CONTAINS]->(i:Item)
WITH i, COUNT(*) as c
WITH COLLECT({i: i, c: c}) AS data
WITH data, REDUCE(s = 0.0, n IN data | s + n.c) AS total
UNWIND data AS d
RETURN d.i.ITEM_ID as item, d.c AS NumTransactions, d.c/total as support
顺便说一句,SIZE(COUNT(t))
效率低下,因为它首先创建一个新的t
节点集合,获取其大小,然后删除该集合。COUNT(t)
会更有效率。
此外,给定您的MATCH
子句,只要 each与给定的, (计算结果行数)t
至多有一个关系,就会给您与 . 相同的结果。CONTAINS
i
COUNT(*)
COUNT(t)
推荐阅读
- c++ - getline(cin,str) 如果未添加 cin.ignore 则跳过第一个输入,但添加后跳过第一个字符
- linux - 运行“dotnet ef migrations add”时在程序集中找不到 DbContext
- python - 如何 Django 模型文件字段参数存储?
- django - 当 Django DEBUG = False 时托管媒体文件
- react-native - 将粘性标题添加到滚动视图
- python - Python Tkinter GUI 凌乱的打印格式
- spring-data - 在 ArangoDB (AQL / Spring Data ArangoDB) 中过滤两个子属性的简洁方法
- filter - Xpages 在重复控件中过滤和排序数据?
- python - 使用 keras 对文本数据进行预测
- javascript - 角度重新加载窗口然后进入新状态