cancel
Showing results forΒ
Did you mean:Β

Head's Up! Site maintenance this Wednesday, February 1. Disruptions expected as we migrate the forums.

## Counting outgoing edges from vertices with unique property and index

Hi Neo4j community,

I appreciate your great support as always. I have a dataset with Customer vertices and Order vertices and these are connected in the following way

(Customer) --[:PURCHASED]--> (Order)

and no edges going from Order to Customer.

Now I would like to find out what the minimum, maximum and average amount of Orders per Customer are and perform the following query.

``````MATCH (c:Customer) WITH
SIZE([(c)--(o:Order) | o]) AS amount
RETURN min(amount), max(amount), avg(amount)``````

This works perfectly fine. However, I would like to know if I can speed things up as the Customer vertices have the property 'customerID' which is unique and I have enforced a uniqueness constraint with respective index on 'customerID' for Customer vertices.

I have tried several approaches, but cannot quite get there and I am not even sure if this is possible.

Thank you very much for any help.

Best,

Philipp

3 REPLIES 3
Ninja

MATCH (c:Customer)
WITH size((c)-[:PURCHASED]->()) AS outdegree
RETURN min(outdegree) AS min, max(outdegree) AS max, avg(outdegree) AS avg

DO NOT specify a label in the size function while using a pattern for this use case, otherwise Neo4j won't be able to use the internal outgoing relationship counter in each customer node.

By the way, a vertice is a part of a geometric structure as being just a point in the space, a node is much more complex so that's why we call them node.

Ninja

I do not think so, since you are not searching on anything specific. Your solution creates a list and uses list comprehension to calculate the count. You could try an alternative approach, like the following:

``````match(n:Customer)
optional match(n)--(m:Order)
with n, count(m) as count
return min(count) as min, max(count) as max, avg(count) as avg``````

Hi,

This definitely helps to speed up the query and thank you for letting me know that I won't be able to make use of the index in this case as I was trying to make this work somehow for quite some time.

Much appreciated.

Best,

Philipp

Nodes 2022

NODES 2022, Neo4j Online Education Summit

All the sessions of the conference are now available online

Neo4j Resources