---
title: Aggregate data with InfluxQL
description: Use InfluxQL aggregate and selector functions to perform aggregate operations on your time series data.
url: https://docs.influxdata.com/influxdb3/enterprise/query-data/influxql/aggregate-select/
estimated_tokens: 2097
product: InfluxDB 3 Enterprise
version: enterprise
publisher: InfluxData
canonical: https://docs.influxdata.com/influxdb3/enterprise/query-data/influxql/aggregate-select/
date: '2025-01-23T10:18:45-07:00'
lastmod: '2025-01-23T10:18:45-07:00'
---

An InfluxQL query that aggregates data includes the following clauses:

\* Required

* \* `SELECT`: Specify fields and calculations to output from a
  measurement or use the wildcard alias (`*`) to select all fields and tags
  from a measurement.
* \* `FROM`: Specify the measurement to query data from.
* `WHERE`: Only retrieve data that meets the specified conditions–for example,
  time is in a time range, contains specific tag values, or contains a field
  value outside specified thresholds.
* `GROUP BY`: Group data by tag values and time intervals.

> [!Note]
> For simplicity, the term *“aggregate”* in this guide refers to applying
> both aggregate and selector functions to a dataset.

Learn how to apply aggregate operations to your queried data:

* [Aggregate and selector functions](#aggregate-and-selector-functions)
  * [Aggregate functions](#aggregate-functions)
  * [Selector functions](#selector-functions)

* [Example aggregate queries](#example-aggregate-queries)

#### InfluxDB v1 to InfluxDB 3 data model

InfluxQL was designed around the InfluxDB v1 data model, but can still be used
to query data from InfluxDB 3 Enterprise. When using the InfluxDB 3 Enterprise
InfluxQL implementation, the data model is different in the following ways:

* an InfluxDB v1 **database and retention policy** combination is combined
  into a single InfluxDB 3 **database** entity.
* an InfluxDB v1 **measurement** is equivalent to an InfluxDB 3 **table**.

## Aggregate and selector functions

Both aggregate and selector functions return a limited number of rows from each group.
Aggregate functions return a single row, whereas some selector functions let you
specify the number of rows to return from each group.
For example, if you `GROUP BY room` and perform an aggregate operation
in your `SELECT` clause, results include an aggregate value for each unique
value of `room`.

### Aggregate functions

Use **aggregate functions** to aggregate values in a specified field for each
group and return a single row per group containing the aggregate field value.

[View InfluxQL aggregate functions](/influxdb3/enterprise/reference/influxql/functions/aggregates/)

##### Basic aggregate query

```sql
SELECT MEAN(co) from home
```

### Selector functions

Use **selector functions** to “select” a value from a specified field.

[View InfluxQL selector functions](/influxdb3/enterprise/reference/influxql/functions/selectors/)

##### Basic selector query

```sql
SELECT TOP(co, 3) from home
```

## Example aggregate queries

* [Perform an ungrouped aggregation](#perform-an-ungrouped-aggregation)
* [Group and aggregate data](#group-and-aggregate-data)
  * [Downsample data by applying interval-based aggregates](#downsample-data-by-applying-interval-based-aggregates)

* [Query rows based on aggregate values](#query-rows-based-on-aggregate-values)

#### Sample data

The following examples use the [Home sensor data](/influxdb3/enterprise/reference/sample-data/#home-sensor-data).
To run the example queries and return results,[write the sample data](/influxdb3/enterprise/reference/sample-data/#write-the-home-sensor-data-to-influxdb)to your InfluxDB 3 Enterprise database before running the example queries.

### Perform an ungrouped aggregation

To aggregate *all* queried values in a specified field:

* Use aggregate or selector functions in your `SELECT` statement.
* Do not include a `GROUP BY` clause to leave your data ungrouped.

```sql
SELECT MEAN(co) AS "average co" FROM home
```

[](#view-example-results)

View example results

name: home

|time|   average co    |
|----|-----------------|
| 0  |5.269230769230769|

### Group and aggregate data

To apply aggregate or selector functions to grouped data:

* Use aggregate or selector functions in your `SELECT` statement.
* Include a `GROUP BY` clause with a comma-delimited list of tags to group by.

Keep the following in mind when using `GROUP BY`:

* `GROUP BY` can use column aliases that are defined in the `SELECT` clause.

```sql
SELECT
  MEAN(temp) AS "average temp"
FROM home
GROUP BY room
```

[](#view-example-results)

View example results

name: home  
tags: room=Kitchen

|time|   average temp   |
|----|------------------|
| 0  |22.623076923076926|

name: home  
tags: room=Living Room

|time|  average temp   |
|----|-----------------|
| 0  |22.16923076923077|

#### Downsample data by applying interval-based aggregates

A common use case when querying time series is downsampling data by applying
aggregates to time-based groups. To group and aggregate data into time-based
groups:

* In your `SELECT` clause, apply [aggregate](/influxdb3/enterprise/reference/influxql/functions/aggregates/)or [selector](/influxdb3/enterprise/reference/influxql/functions/selectors/)functions to queried fields.

* In your `WHERE` clause, include time bounds for the query.
  Interval-based aggregates produce a row for each specified time interval.
  If no time bounds are specified in the `WHERE` clause, the query uses the
  default time range (1970-01-01T00:00:00Z to now) and returns a row for each
  interval in that time range.

* In your `GROUP BY` clause:

  * Use the [`time()` function](/influxdb3/enterprise/reference/influxql/functions/date-time/#time)to specify the time interval to group by.
  * *Optional*: Specify other tags to group by.

The following example retrieves unique combinations of time intervals and rooms with their minimum, maximum, and average temperatures.

```sql
SELECT
  MAX(temp) AS "max temp",
  MIN(temp) AS "min temp",
  MEAN(temp) AS "average temp"
FROM home
WHERE
  time >= '2022-01-01T08:00:00Z'
  AND time < '2022-01-01T20:00:00Z'
GROUP BY time(2h), room
```

[](#view-example-results-1)

View example results

name: home  
tags: room=Kitchen

|        time        |max temp|min temp|   average temp   |
|--------------------|--------|--------|------------------|
|2022-01-01T08:00:00Z|   23   |   21   |        22        |
|2022-01-01T10:00:00Z|  22.7  |  22.4  |22.549999999999997|
|2022-01-01T12:00:00Z|  22.8  |  22.5  |      22.65       |
|2022-01-01T14:00:00Z|  22.8  |  22.7  |      22.75       |
|2022-01-01T16:00:00Z|  22.7  |  22.4  |22.549999999999997|
|2022-01-01T18:00:00Z|  23.3  |  23.1  |23.200000000000003|
|2022-01-01T20:00:00Z|  22.7  |  22.7  |       22.7       |

name: home  
tags: room=Living Room

|        time        |max temp|min temp|   average temp   |
|--------------------|--------|--------|------------------|
|2022-01-01T08:00:00Z|  21.4  |  21.1  |      21.25       |
|2022-01-01T10:00:00Z|  22.2  |  21.8  |        22        |
|2022-01-01T12:00:00Z|  22.4  |  22.2  |22.299999999999997|
|2022-01-01T14:00:00Z|  22.3  |  22.3  |       22.3       |
|2022-01-01T16:00:00Z|  22.6  |  22.4  |       22.5       |
|2022-01-01T18:00:00Z|  22.8  |  22.5  |      22.65       |
|2022-01-01T20:00:00Z|  22.2  |  22.2  |       22.2       |

#### Related

* [InfluxQL aggregate functions](/influxdb3/enterprise/reference/influxql/functions/aggregates/)
* [InfluxQL selector functions](/influxdb3/enterprise/reference/influxql/functions/selectors/)

[query](/influxdb3/enterprise/tags/query/)[influxql](/influxdb3/enterprise/tags/influxql/)
| time | average co |
| --- | --- |
| time | average co |
| 0 | 5.269230769230769 |

| time | average temp |
| --- | --- |
| time | average temp |
| 0 | 22.623076923076926 |

| time | average temp |
| --- | --- |
| time | average temp |
| 0 | 22.16923076923077 |

| time | max temp | min temp | average temp |
| --- | --- | --- | --- |
| time | max temp | min temp | average temp |
| 2022-01-01T08:00:00Z | 23 | 21 | 22 |
| 2022-01-01T10:00:00Z | 22.7 | 22.4 | 22.549999999999997 |
| 2022-01-01T12:00:00Z | 22.8 | 22.5 | 22.65 |
| 2022-01-01T14:00:00Z | 22.8 | 22.7 | 22.75 |
| 2022-01-01T16:00:00Z | 22.7 | 22.4 | 22.549999999999997 |
| 2022-01-01T18:00:00Z | 23.3 | 23.1 | 23.200000000000003 |
| 2022-01-01T20:00:00Z | 22.7 | 22.7 | 22.7 |

| time | max temp | min temp | average temp |
| --- | --- | --- | --- |
| time | max temp | min temp | average temp |
| 2022-01-01T08:00:00Z | 21.4 | 21.1 | 21.25 |
| 2022-01-01T10:00:00Z | 22.2 | 21.8 | 22 |
| 2022-01-01T12:00:00Z | 22.4 | 22.2 | 22.299999999999997 |
| 2022-01-01T14:00:00Z | 22.3 | 22.3 | 22.3 |
| 2022-01-01T16:00:00Z | 22.6 | 22.4 | 22.5 |
| 2022-01-01T18:00:00Z | 22.8 | 22.5 | 22.65 |
| 2022-01-01T20:00:00Z | 22.2 | 22.2 | 22.2 |
