neo4j - Neo4J:没有重复匹配的多个聚合
问题描述
如何在 Neo4j 中进行多个聚合而不重复我的 MATCH 查询?
假设我有一个数据库,其中包含客户、他们去的餐厅以及特定年份每个客户/餐厅的账单记录。请注意,客户可能经常光顾不同的餐馆。我想获取客户-餐厅对的列表,其中该年的总账单金额在 90% 及以上。
我尝试了类似以下的方法,但 Neo4j 不允许在单个查询中使用多个聚合:
MATCH (c:Customer)-[:PAID]->(b:Bill)-[:AT]->(r:Restaurant)
WITH c, r, sum(b.amount) AS total_amount
WHERE total_amount > percentileCont(total_amount, 0.9)
RETURN c, r
上述语法将返回错误。我可以尝试以下替代方法,它确实有效:
MATCH (c:Customer)-[:PAID]->(b:Bill)-[:AT]->(r:Restaurant)
WITH c, r, sum(b.amount) AS total_amount
WITH percentileCont(total_amount, 0.9) as percentile
MATCH (c:Customer)-[:PAID]->(b:Bill)-[:AT]->(r:Restaurant)
WITH c, r, sum(b.amount) AS total amount, per
WHERE total_amount > percentile
RETURN c,r
但是,这是相当低效的,因为我必须运行完全相同的查询两次。有没有更优雅的方法来做到这一点?
解决方案
推荐阅读
- python - Python中的模拟嵌套方法
- matlab - 如何将误差线设置为与 Matlab 中的绘图不同的颜色?
- bash - 使用 Linux 工具将多行 csv 转换为单行
- linux - Pip 没有链接到我升级的 Python 版本。包 python3-pip 不可用,但被另一个包引用
- python - 无法安装 pip (python 3.7.4)。它没有与python一起安装。get-pip.py 也不起作用
- javascript - 使用 fullcalendar.js 如何在日历的每个空单元格上显示时段开始时间?
- c++ - arcsin 和 arccos 通常是如何实现的?
- java - 迭代整数列表并计算差异(java)
- javascript - 如何在 React 中循环遍历 Firebase JSON
- c# - 使用php hash和salt登录时密码错误