Neo4j: Filter nodes based on aggregate function

2019-05-26 18:15发布

问题:

Suppose I have a list of customer nodes and a list of orders each customer has placed represented as order nodes associated to these customer nodes. Each order has a cost numeric property associated to it.

I want to return those customers, whose average order is greater than a threshold. Here is some non-functioning code that exemplifies what I want:

MATCH (n0:Customer)-[]-(n1:Order)
WITH n1.cost as cost
WHERE avg(cost) > 300
RETURN n0, avg(cost)

But of course this is not quite right. How should I go about it?

回答1:

What you have is close, you just need to do the aggregation in the WITH statement, not the WHERE clause

MATCH (n0:Customer)-[]-(n1:Order)
WITH n0, avg(n1.cost) AS cost WHERE cost > 300
RETURN n0, cost


标签: neo4j cypher