基于应用于子节点的两个子集的两个聚合函数来过滤节点

时间:2017-08-10 19:08:23

标签: neo4j cypher

这是(Neo4j: Filter nodes based on aggregate function

的扩展

假设我有一组客户节点和每个客户与这些节点关联的一组订单。每个订单节点都有两个与之关联的属性:成本和放置订单的商店。我想提取那些在storeA的平均订单超过300但同时他在商店B的平均订单低于100的客户。这是我的(无效)尝试这样做:

MATCH (n0:Customer)-[]->(n1:Order {store: 'storeA'})
WITH n0, avg(n1.cost) as average_storeA WHERE average_storeA > 300
WITH (n0:Customer)-[]->(n2:Order {store: 'storeB'})
WITH n0, avg(n2.cost) as average_storeB where average_storeB < 100
return n0

问题在于,在第3行中,WITH语句返回一个错误,它不知道n2的含义。如何将前一个匹配语句的结果传递给引入新节点查询/变量的新匹配语句?我想你可以尝试两个独立的匹配查询,然后找到节点集之间的交集,但这应该比在已经过滤的节点集上应用第二个过滤器慢得多。

1 个答案:

答案 0 :(得分:1)

而不是第3行中的from django.shortcuts import render def current_datetime(request): now = datetime.datetime.now() return render(request, 'admin/current_datetime.html', {'current_date':now}) ,您应使用之前的public class IncidentReporter { public void reportIncident(Class<?>... differentClasses) { } } 变量WITH新模式,如下所示:

MATCH