Documentation

Find percentile and quantile values

This page documents an earlier version of InfluxDB OSS. InfluxDB 3 Core is the latest stable version.

Use the quantile() function to return a value representing the q quantile or percentile of input data.

Percentile versus quantile

Percentiles and quantiles are very similar, differing only in the number used to calculate return values. A percentile is calculated using numbers between 0 and 100. A quantile is calculated using numbers between 0.0 and 1.0. For example, the 0.5 quantile is the same as the 50th percentile.

Select a method for calculating the quantile

Select one of the following methods to calculate the quantile:

estimate_tdigest

(Default) An aggregate method that uses a t-digest data structure to compute a quantile estimate on large data sources. Output tables consist of a single row containing the calculated quantile.

If calculating the 0.5 quantile or 50th percentile:

Given the following input table:

_time_value
2020-01-01T00:01:00Z1.0
2020-01-01T00:02:00Z1.0
2020-01-01T00:03:00Z2.0
2020-01-01T00:04:00Z3.0

estimate_tdigest returns:

_value
1.5

exact_mean

An aggregate method that takes the average of the two points closest to the quantile value. Output tables consist of a single row containing the calculated quantile.

If calculating the 0.5 quantile or 50th percentile:

Given the following input table:

_time_value
2020-01-01T00:01:00Z1.0
2020-01-01T00:02:00Z1.0
2020-01-01T00:03:00Z2.0
2020-01-01T00:04:00Z3.0

exact_mean returns:

_value
1.5

exact_selector

A selector method that returns the data point for which at least q points are less than. Output tables consist of a single row containing the calculated quantile.

If calculating the 0.5 quantile or 50th percentile:

Given the following input table:

_time_value
2020-01-01T00:01:00Z1.0
2020-01-01T00:02:00Z1.0
2020-01-01T00:03:00Z2.0
2020-01-01T00:04:00Z3.0

exact_selector returns:

_time_value
2020-01-01T00:02:00Z1.0

The examples below use the example data variable.

Find the value representing the 99th percentile

Use the default method, "estimate_tdigest", to return all rows in a table that contain values in the 99th percentile of data in the table.

data
    |> quantile(q: 0.99)

Find the average of values closest to the quantile

Use the exact_mean method to return a single row per input table containing the average of the two values closest to the mathematical quantile of data in the table. For example, to calculate the 0.99 quantile:

data
    |> quantile(q: 0.99, method: "exact_mean")

Find the point with the quantile value

Use the exact_selector method to return a single row per input table containing the value that q * 100% of values in the table are less than. For example, to calculate the 0.99 quantile:

data
    |> quantile(q: 0.99, method: "exact_selector")

Use quantile() with aggregateWindow()

aggregateWindow() segments data into windows of time, aggregates data in each window into a single point, and then removes the time-based segmentation. It is primarily used to downsample data.

To specify the quantile calculation method in aggregateWindow(), use the full function syntax:

data
    |> aggregateWindow(
        every: 5m,
        fn: (tables=<-, column) => tables
            |> quantile(q: 0.99, method: "exact_selector"),
    )

Was this page helpful?

Thank you for your feedback!


New in InfluxDB 3.6

Key enhancements in InfluxDB 3.6 and the InfluxDB 3 Explorer 1.4.

See the Blog Post

InfluxDB 3.6 is now available for both Core and Enterprise. This release introduces the 1.4 update to InfluxDB 3 Explorer, featuring the beta launch of Ask AI, along with new capabilities for simple startup and expanded functionality in the Processing Engine.

For more information, check out:

InfluxDB Docker latest tag changing to InfluxDB 3 Core

On February 3, 2026, the latest tag for InfluxDB Docker images will point to InfluxDB 3 Core. To avoid unexpected upgrades, use specific version tags in your Docker deployments.

If using Docker to install and run InfluxDB, the latest tag will point to InfluxDB 3 Core. To avoid unexpected upgrades, use specific version tags in your Docker deployments. For example, if using Docker to run InfluxDB v2, replace the latest version tag with a specific version tag in your Docker pull command–for example:

docker pull influxdb:2