【发布时间】:2017-08-10 19:08:22
【问题描述】:
这是 (Neo4j: Filter nodes based on aggregate function) 的扩展
假设我有一组客户节点和一组与这些节点关联的每个客户下的订单。每个订单节点都有两个与之关联的属性:成本和下订单的商店。我想提取那些在商店 A 的平均订单超过 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 的含义。如何将先前匹配语句的结果通过管道传输到引入新节点查询/变量的新匹配语句?我想你可以尝试两个独立的匹配查询,然后找到节点集之间的交集,但这应该比在已经过滤的节点集之上应用第二个过滤器要慢得多。
【问题讨论】: