Thursday, June 18, 2026

SUM() OVER() is a window function often used to calculate a running total without grouping rows.

 

SUM() OVER() is a window function often used to calculate a running total without grouping rows.

Sample Employees Table

EmployeeIDEmployeeNameSalary
1Alice3000
2Bob4000
3Charlie2500
4David5000
5Emma3500

Running Total of Salaries

SELECT
    EmployeeID,
    EmployeeName,
    Salary,
    SUM(Salary) OVER (
        ORDER BY EmployeeID
    ) AS RunningTotal
FROM Employees;

Output

EmployeeIDEmployeeNameSalaryRunningTotal
1Alice30003000
2Bob40007000
3Charlie25009500
4David500014500
5Emma350018000

How it works

For each row:

  • Alice → 3000

  • Alice + Bob → 7000

  • Alice + Bob + Charlie → 9500

  • Alice + Bob + Charlie + David → 14500

  • Alice + Bob + Charlie + David + Emma → 18000

The window function is effectively doing:

SUM(Salary) OVER (
    ORDER BY EmployeeID
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)

which means:

  • Start from the first row (UNBOUNDED PRECEDING)

  • Keep adding values up to the current row (CURRENT ROW)

Running Total by Department

Suppose the table has a department column:

EmployeeIDEmployeeNameDepartmentSalary
1AliceHR3000
2BobHR4000
3CharlieIT2500
4DavidIT5000
5EmmaHR3500
SELECT
    EmployeeID,
    EmployeeName,
    Department,
    Salary,
    SUM(Salary) OVER (
        PARTITION BY Department
        ORDER BY EmployeeID
    ) AS DeptRunningTotal
FROM Employees;

Output

EmployeeIDEmployeeNameDepartmentSalaryDeptRunningTotal
1AliceHR30003000
2BobHR40007000
5EmmaHR350010500
3CharlieIT25002500
4DavidIT50007500

Here, PARTITION BY Department restarts the running total for each department.

Formula:

SUM(column_name) OVER (
    [PARTITION BY partition_column]
    ORDER BY order_column
)

This is one of the most common SQL interview questions involving window functions.

No comments:

Post a Comment