## Stats Aggregationedit

A `multi-value`

metrics aggregation that computes stats over numeric values extracted from the aggregated documents. These values can be extracted either from specific numeric fields in the documents, or be generated by a provided script.

The stats that are returned consist of: `min`

, `max`

, `sum`

, `count`

and `avg`

.

Assuming the data consists of documents representing exams grades (between 0 and 100) of students

{ "aggs" : { "grades_stats" : { "stats" : { "field" : "grade" } } } }

The above aggregation computes the grades statistics over all documents. The aggregation type is `stats`

and the `field`

setting defines the numeric field of the documents the stats will be computed on. The above will return the following:

{ ... "aggregations": { "grades_stats": { "count": 6, "min": 60, "max": 98, "avg": 78.5, "sum": 471 } } }

The name of the aggregation (`grades_stats`

above) also serves as the key by which the aggregation result can be retrieved from the returned response.

### Scriptedit

Computing the grades stats based on a script:

{ ..., "aggs" : { "grades_stats" : { "stats" : { "script" : { "lang": "painless", "inline": "doc['grade'].value" } } } } }

This will interpret the `script`

parameter as an `inline`

script with the `painless`

script language and no script parameters. To use a file script use the following syntax:

{ ..., "aggs" : { "grades_stats" : { "stats" : { "script" : { "file": "my_script", "params" : { "field" : "grade" } } } } } }

for indexed scripts replace the `file`

parameter with an `id`

parameter.

#### Value Scriptedit

It turned out that the exam was way above the level of the students and a grade correction needs to be applied. We can use a value script to get the new stats:

{ "aggs" : { ... "aggs" : { "grades_stats" : { "stats" : { "field" : "grade", "script" : "lang": "painless", "inline": "_value * params.correction", "params" : { "correction" : 1.2 } } } } } } }

### Missing valueedit

The `missing`

parameter defines how documents that are missing a value should be treated.
By default they will be ignored but it is also possible to treat them as if they
had a value.