---
title: Query cumulative sum
description: Use the cumulativeSum() function to calculate a running total of values.
url: https://docs.influxdata.com/enterprise_influxdb/v1/flux/guides/cumulativesum/
estimated_tokens: 386
publisher: InfluxData
canonical: https://docs.influxdata.com/enterprise_influxdb/v1/flux/guides/cumulativesum/
date: '2025-01-13T07:21:11-07:00'
lastmod: '2025-01-13T07:21:11-07:00'
---

Use the [`cumulativeSum()` function](/flux/v0/stdlib/universe/cumulativesum/)to calculate a running total of values.`cumulativeSum` sums the values of subsequent records and returns each row updated with the summed total.

**Given the following input table:**

|\_time|\_value|
|------|-------|
| 0001 |   1   |
| 0002 |   2   |
| 0003 |   1   |
| 0004 |   3   |

**`cumulativeSum()` returns:**

|\_time|\_value|
|------|-------|
| 0001 |   1   |
| 0002 |   3   |
| 0003 |   4   |
| 0004 |   7   |

> [!Note]
> The examples below use the [example data variable](/enterprise_influxdb/v1/flux/guides/#example-data-variable).

##### Calculate the running total of values

```js
data
    |> cumulativeSum()
```

## Use cumulativeSum() with aggregateWindow()

[`aggregateWindow()`](/flux/v0/stdlib/universe/aggregatewindow/)segments data into windows of time, aggregates data in each window into a single
point, then removes the time-based segmentation.
It is primarily used to downsample data.

`aggregateWindow()` expects an aggregate function that returns a single row for each time window.
To use `cumulativeSum()` with `aggregateWindow`, use `sum` in `aggregateWindow()`,
then calculate the running total of the aggregate values with `cumulativeSum()`.

```js
data
    |> aggregateWindow(every: 5m, fn: sum)
    |> cumulativeSum()
```
| _time | _value |
| --- | --- |
| _time | _value |
| 0001 | 1 |
| 0002 | 2 |
| 0003 | 1 |
| 0004 | 3 |

| _time | _value |
| --- | --- |
| _time | _value |
| 0001 | 1 |
| 0002 | 3 |
| 0003 | 4 |
| 0004 | 7 |
