5

I wonder why this is considered an invalid use of aggregate functions in Neo4j's Cypher:

MATCH (p:Project)-[:EMPLOYS]-(n:Person) SET p.youngest = MIN(n.age);

While the following is considered a valid use case:

MATCH (p:Project)-[:EMPLOYS]-(n:Person) RETURN p.name, MIN(n.age) AS youngest;

How should I rewrite the first query to make it valid?

retrography
  • 6,302
  • 3
  • 22
  • 32

2 Answers2

10

As for "why" your original Cypher attempt does not work, and the answer by @mah does work: Cypher only permits aggregation functions to be used in WITH and RETURN clauses.

cybersam
  • 63,203
  • 6
  • 53
  • 76
9

A slight change to the query makes it work:

MATCH (p:Project)-[:EMPLOYS]-(n:Person)
WITH p, MIN(n.age) AS min_age 
SET p.youngest = min_age;
cybersam
  • 63,203
  • 6
  • 53
  • 76
retrography
  • 6,302
  • 3
  • 22
  • 32