apoc.agg.statistics

Function

apoc.agg.statistics(value INTEGER \| FLOAT, percentiles LIST<FLOAT>) - returns the following statistics on the INTEGER and FLOAT values in the given collection: percentiles, min, minNonZero, max, total, mean, stdev.

Signature

apoc.agg.statistics(value :: INTEGER \| FLOAT, percentiles = [0.5, 0.75, 0.9, 0.95, 0.99] :: LIST<FLOAT>) :: MAP

Input parameters

Name Type Default

value

INTEGER | FLOAT

null

percentiles

LIST<FLOAT>

[0.5, 0.75, 0.9, 0.95, 0.99]

Usage examples

The examples in this section are based on the following sample graph:

CREATE (TopGun:Movie {title:"Top Gun", released:1986, tagline:'I feel the need, the need for speed.'})
CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})
CREATE (AsGoodAsItGets:Movie {title:'As Good as It Gets', released:1997, tagline:'A comedy from the heart that goes for the throat.'})
CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (SnowFallingonCedars:Movie {title:'Snow Falling on Cedars', released:1999, tagline:'First loves last. Forever.'})
CREATE (JerryMaguire:Movie {title:'Jerry Maguire', released:2000, tagline:'The rest of his life begins now.'});
CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})

We can find the release year of movies for different statistical measures, by running the query below:

MATCH (movie:Movie)
RETURN apoc.agg.statistics(movie.released) AS stats;
Table 1. Results
stats

{total: 10, min: 1986, minNonZero: 1986.0, max: 2003, mean: 1996.8, 0.5: 1997, 0.99: 2003, 0.75: 1999, 0.9: 2000, 0.95: 2003, stdev: 4.3772137256478585}

We can expand the map of values to have one key per row by using the UNWIND clause on the keys of the map:

MATCH (movie:Movie)
WITH apoc.agg.statistics(movie.released) AS stats
UNWIND keys(stats) AS key
RETURN key, stats[key] AS value;
Table 2. Results
key value

"total"

10

"min"

1986

"minNonZero"

1986.0

"max"

2003

"mean"

1996.8

"0.5"

1997

"0.99"

2003

"0.75"

1999

"0.9"

2000

"0.95"

2003

"stdev"

4.3772137256478585

By default, the function will return the 0.5, 0.75, 0.9, 0.95, and 0.99 percentiles, but we can pass in our own percentiles (2nd parameter):

MATCH (movie:Movie)
WITH apoc.agg.statistics(movie.released, [0.1, 0.25]) AS stats
UNWIND keys(stats) AS key
RETURN key, stats[key] AS value;
Table 3. Results
key value

"total"

10

"min"

1986

"minNonZero"

1986.0

"0.1"

1986

"max"

2003

"mean"

1996.8

"0.25"

1996

"stdev"

4.3772137256478585