---
title: Query cumulative sum
seotitle: Query cumulative sum in Flux
list_title: Cumulative sum
description: >
  Use the `cumulativeSum()` function to calculate a running total of values.
weight: 210
menu:
  v2_0:
    parent: Query with Flux
    name: Cumulative sum
v2.0/tags: [query, cumulative sum]
related:
  - /v2.0/reference/flux/stdlib/built-in/transformations/cumulativesum/
list_query_example: cumulative_sum
---

Use the [`cumulativeSum()` function](/v2.0/reference/flux/stdlib/built-in/transformations/cumulativesum/)
to calculate a running total of values.
`cumulativeSum` sums the values of subsequent records and returns each row updated with the summed total.

{{< flex >}}
{{% flex-content "half" %}}
**Given the following input table:**

| _time | _value |
| ----- |:------:|
| 0001  | 1      |
| 0002  | 2      |
| 0003  | 1      |
| 0004  | 3      |
{{% /flex-content %}}
{{% flex-content "half" %}}
**`cumulativeSum()` returns:**

| _time | _value |
| ----- |:------:|
| 0001  | 1      |
| 0002  | 3      |
| 0003  | 4      |
| 0004  | 7      |
{{% /flex-content %}}
{{< /flex >}}

{{% note %}}
The examples below use the [example data variable](/v2.0/query-data/flux/#example-data-variable).
{{% /note %}}

##### Calculate the running total of values
```js
data
  |> cumulativeSum()
```

## Use cumulativeSum() with aggregateWindow()
[`aggregateWindow()`](/v2.0/reference/flux/stdlib/built-in/transformations/aggregates/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](/v2.0/process-data/common-tasks/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()
```
