---
title: Find median values
description: Use median() to return a value representing the 0.5 quantile (50th percentile) or median of input data.
url: https://docs.influxdata.com/influxdb/v2/query-data/flux/median/
estimated_tokens: 2332
product: InfluxDB OSS v2
version: v2
---

# Find median values

This page documents an earlier version of InfluxDB OSS. [InfluxDB 3 Core](/influxdb3/core/) is the latest stable version.

#### API token hashing is enabled by default in InfluxDB OSS 2.9.0

Stronger token security: tokens are stored as hashes on disk, so a copy of the database file doesn’t expose usable tokens. Existing tokens are hashed on first startup and the original strings can’t be recovered afterward — **capture any plaintext tokens you still need before you upgrade**.

For more information, see [Token hashing](/influxdb/v2/admin/tokens/#token-hashing).

Use the [`median()` function](/flux/v0/stdlib/universe/median/) to return a value representing the `0.5` quantile (50th percentile) or median of input data.

## Select a method for calculating the median

Select one of the following methods to calculate the median:

-   [estimate\_tdigest](#estimate_tdigest)
-   [exact\_mean](#exact_mean)
-   [exact\_selector](#exact_selector)

### estimate\_tdigest

**(Default)** An aggregate method that uses a [t-digest data structure](https://github.com/tdunning/t-digest) to compute an accurate `0.5` quantile estimate on large data sources. Output tables consist of a single row containing the calculated median.

**Given the following input table:**

| _time | _value |
| --- | --- |
| 2020-01-01T00:01:00Z | 1.0 |
| 2020-01-01T00:02:00Z | 1.0 |
| 2020-01-01T00:03:00Z | 2.0 |
| 2020-01-01T00:04:00Z | 3.0 |

**`estimate_tdigest` returns:**

| _value |
| --- |
| 1.5 |

### exact\_mean

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

**Given the following input table:**

| _time | _value |
| --- | --- |
| 2020-01-01T00:01:00Z | 1.0 |
| 2020-01-01T00:02:00Z | 1.0 |
| 2020-01-01T00:03:00Z | 2.0 |
| 2020-01-01T00:04:00Z | 3.0 |

**`exact_mean` returns:**

| _value |
| --- |
| 1.5 |

### exact\_selector

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

**Given the following input table:**

| _time | _value |
| --- | --- |
| 2020-01-01T00:01:00Z | 1.0 |
| 2020-01-01T00:02:00Z | 1.0 |
| 2020-01-01T00:03:00Z | 2.0 |
| 2020-01-01T00:04:00Z | 3.0 |

**`exact_selector` returns:**

| _time | _value |
| --- | --- |
| 2020-01-01T00:02:00Z | 1.0 |

The examples below use the [example data variable](/influxdb/v2/query-data/flux/#example-data-variable).

## Find the value that represents the median

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

```js
data
    |> median()
```

## Find the average of values closest to the median

Use the `exact_mean` method to return a single row per input table containing the average of the two values closest to the mathematical median of data in the table.

```js
data
    |> median(method: "exact_mean")
```

## Find the point with the median value

Use the `exact_selector` method to return a single row per input table containing the value that 50% of values in the table are less than.

```js
data
    |> median(method: "exact_selector")
```

## Use median() with aggregateWindow()

[`aggregateWindow()`](/flux/v0/stdlib/universe/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](/influxdb/v2/process-data/common-tasks/downsample-data/).

To specify the [median calculation method](#select-a-method-for-calculating-the-median) in `aggregateWindow()`, use the [full function syntax](/flux/v0/stdlib/universe/aggregatewindow/#specify-parameters-of-the-aggregate-function):

```js
data
  |> aggregateWindow(
    every: 5m,
    fn: (tables=<-, column) => tables |> median(method: "exact_selector"),
  )
```

#### Related

-   [Find percentile and quantile values](/influxdb/v2/query-data/flux/percentile-quantile/)
-   [median() function](/flux/v0/stdlib/universe/median/)
-   [quantile() function](/flux/v0/stdlib/universe/quantile/)

[query](/influxdb/v2/tags/query/) [median](/influxdb/v2/tags/median/)
