# How do you calculate running totals in SQL?

Source: https://zilliz.com/ai-faq/how-do-you-calculate-running-totals-in-sql
Author: zilliz

To calculate running totals in SQL, you typically use window functions, specifically the `SUM()` function with the `OVER()` clause. This method allows you to create a cumulative sum of a specified column while maintaining the order of your dataset. A running total adds the current row's value to the total of all previous rows based on a defined order, providing insight into trends over time or through a sequence of events.

For instance, consider a table named `Sales` that includes `SaleDate` and `Revenue` columns. To compute a running total of revenue over time, you can structure your SQL query as follows:

```sql
SELECT 
 SaleDate,
 Revenue,
 SUM(Revenue) OVER (ORDER BY SaleDate) AS RunningTotal
FROM 
 Sales
ORDER BY 
 SaleDate;
```

In this query, `SUM(Revenue)` computes the cumulative total, while the `ORDER BY SaleDate` within the `OVER()` clause ensures that the totals are calculated in chronological order. The result will display each sale alongside its respective running total. The use of an `ORDER BY` clause is essential because it defines how the rows are processed to calculate the running total.

You can also customize running totals by adding a `PARTITION BY` clause if you want to calculate separate running totals for different groups within your data. For example, if you have a `Region` column and you want to get running totals for each region, you could modify the query as follows:

```sql
SELECT 
 SaleDate,
 Region,
 Revenue,
 SUM(Revenue) OVER (PARTITION BY Region ORDER BY SaleDate) AS RunningTotal
FROM 
 Sales
ORDER BY 
 Region, SaleDate;
```

In this version, the running total is calculated separately for each region based on the sale dates within that region. This makes window functions very versatile for handling various data analysis scenarios, providing clear insights into progress and performance over time.
