Window function (SQL)

1

In SQL, a window function or analytic function is a function which uses values from one or multiple rows to return a value for each row. (This contrasts with an aggregate function, which returns a single value for multiple rows.) Window functions have an OVER clause; any function without an OVER clause is not a window function, but rather an aggregate or single-row (scalar) function.

Example

As an example, here is a query which uses a window function to compare the salary of each employee with the average salary of their department (example from the PostgreSQL documentation): Output: depname | empno | salary | avg --+---++-- develop | 11 | 5200 | 5020.0000000000000000 develop | 7 | 4200 | 5020.0000000000000000 develop | 9 | 4500 | 5020.0000000000000000 develop | 8 | 6000 | 5020.0000000000000000 develop | 10 | 5200 | 5020.0000000000000000 personnel | 5 | 3500 | 3700.0000000000000000 personnel | 2 | 3900 | 3700.0000000000000000 sales | 3 | 4800 | 4866.6666666666666667 sales | 1 | 5000 | 4866.6666666666666667 sales | 4 | 4800 | 4866.6666666666666667 (10 rows) The clause groups rows into partitions, and the function is applied to each partition separately. If the clause is omitted (such as with an empty clause), then the entire result set is treated as a single partition. For this query, the average salary reported would be the average taken over all rows. Window functions are evaluated after aggregation (after the clause and non-window aggregate functions, for example).

Syntax

According to the PostgreSQL documentation, a window function has the syntax of one of the following: where has syntax: has the syntax of one of the following: and can be , , , , or. can be, , , or. refers to any expression that does not contain a call to a window function. Notation:

Example

Window functions allow access to data in the records right before and after the current record. A window function defines a frame or window of rows with a given length around the current row, and performs a calculation across the set of data in the window. NAME | Aaron| <-- Preceding (unbounded) Andrew| Amelia| James| Jill| Johnny| <-- 1st preceding row Michael| <-- Current row Nick| <-- 1st following row Ophelia| Zach| <-- Following (unbounded) In the above table, the next query extracts for each row the values of a window with one preceding and one following row: The result query contains the following values: | PREV | NAME | NEXT | |--|--|--| | (null)| Aaron| Andrew| | Aaron| Andrew| Amelia| | Andrew| Amelia| James| | Amelia| James| Jill| | James| Jill| Johnny| | Jill| Johnny| Michael| | Johnny| Michael| Nick| | Michael| Nick| Ophelia| | Nick| Ophelia| Zach| | Ophelia| Zach| (null)|

History

Window functions were introduced to the SQL:2003 standard and had functionality expanded in later specifications. Support for particular database implementations was added as follows:

This article is derived from Wikipedia and licensed under CC BY-SA 4.0. View the original article.

Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc.
Bliptext is not affiliated with or endorsed by Wikipedia or the Wikimedia Foundation.

Edit article