window_func

Содержание

Слайд 2

A window function performs a calculation across a set of table rows that are

A window function performs a calculation across a set of table rows
somehow related to the current row. This is comparable to the type of calculation that can be done with an aggregate function. But unlike regular aggregate functions, use of a window function does not cause rows to become grouped into a single output row — the rows retain their separate identities. Behind the scenes, the window function is able to access more than just the current row of the query result.

PostgreSQL Window Functions

Window Functions in Action

Lets take an example table:

Слайд 3

Lets assume that you wanted to find the highest paid person in

Lets assume that you wanted to find the highest paid person in
each department. There's a chance you could do this by creating a complicated stored procedure, or maybe even some very complex SQL. Most developers would even opt for pulling the data back into their preferred language and then looping over results. With window functions this gets much easier.

First we can rank each individual over a certain grouping:

Слайд 4

Hopefully its clear from here how we can filter and find only

Hopefully its clear from here how we can filter and find only
the top paid employee in each department:

The best part of this is Postgres will optimize the query for you versus parsing over the entire result set if you were to do this your self in plpgsql or in your applications code.

Слайд 5

Introduction to PostgreSQL window functions

The easiest way to understand the window functions

Introduction to PostgreSQL window functions The easiest way to understand the window
is to start by reviewing the aggregate functions. An aggregate function aggregates data from a set of rows into a single row.
The following example uses the AVG() aggregate function to calculate the average price of all products in the products table.

To apply the aggregate function to subsets of rows, you use the GROUP BY clause. The following example returns the average price for every product group.

Слайд 6

As you see clearly from the output, the AVG() function reduces the

As you see clearly from the output, the AVG() function reduces the
number of rows returned by the queries in both examples.
Similar to an aggregate function, a window function operates on a set of rows. However, it does not reduce the number of rows returned by the query.
The term window describes the set of rows on which the window function operates. A window function returns values from the rows in a window.
For instance, the following query returns the product name, the price, product group name, along with the average prices of each product group.

In this query, the AVG() function works as a window function that operates on a set of rows specified by the OVER clause. Each set of rows is called a window.

Слайд 7

PostgreSQL Window Function Syntax

PostgreSQL has a sophisticated syntax for window function call.

PostgreSQL Window Function Syntax PostgreSQL has a sophisticated syntax for window function
The following illustrates the simplified version:

In this syntax:
window_function(arg1,arg2,...)
The window_function is the name of the window function. Some window functions do not accept any argument.

Слайд 8

PARTITION BY clause
The PARTITION BY clause divides rows into multiple groups or

PARTITION BY clause The PARTITION BY clause divides rows into multiple groups
partitions to which the window function is applied. Like the example above, we used the product group to divide the products into groups (or partitions).
The PARTITION BY clause is optional. If you skip the PARTITION BY clause, the window function will treat the whole result set as a single partition.

ORDER BY clause
The ORDER BY clause specifies the order of rows in each partition to which the window function is applied.
The ORDER BY clause uses the NULLS FIRST or NULLS LAST option to specify whether nullable values should be first or last in the result set. The default is NULLS LAST option.
frame_clause
The frame_clause defines a subset of rows in the current partition to which the window function is applied. This subset of rows is called a frame.

Слайд 9

If you use multiple window functions in a query:

you can use the

If you use multiple window functions in a query: you can use
WINDOW clause to shorten the query as shown in the following query:

It is also possible to use the WINDOW clause even though you call one window function in a query:

Слайд 10

PostgreSQL window function List

The following table lists all window functions provided by

PostgreSQL window function List The following table lists all window functions provided
PostgreSQL. Note that some aggregate functions such as AVG(), MIN(), MAX(), SUM(), and COUNT() can be also used as window functions.

Слайд 11

The ROW_NUMBER(), RANK(), and DENSE_RANK() functions

The ROW_NUMBER(), RANK(), and DENSE_RANK() functions assign

The ROW_NUMBER(), RANK(), and DENSE_RANK() functions The ROW_NUMBER(), RANK(), and DENSE_RANK() functions
an integer to each row based on its order in its result set.
The ROW_NUMBER() function assigns a sequential number to each row in each partition. See the following query:

Слайд 12

The RANK() function assigns ranking within an ordered partition. If rows have

The RANK() function assigns ranking within an ordered partition. If rows have
the same values, the RANK() function assigns the same rank, with the next ranking(s) skipped.
See the following query:

In the laptop product group, both Dell Vostro and Sony VAIO products have the same price, therefore, they receive the same rank 1. The next row in the group is HP Elite that receives the rank 3 because the rank 2 is skipped.

Слайд 13

Similar to the RANK() function, the DENSE_RANK() function assigns a rank to

Similar to the RANK() function, the DENSE_RANK() function assigns a rank to
each row within an ordered partition, but the ranks have no gap. In other words, the same ranks are assigned to multiple rows and no ranks are skipped.

Within the laptop product group, rank 1 is assigned twice to Dell Vostro and Sony VAIO. The next rank is 2 assigned to HP Elite.

Слайд 14

The FIRST_VALUE and LAST_VALUE functions

The FIRST_VALUE() function returns a value evaluated against

The FIRST_VALUE and LAST_VALUE functions The FIRST_VALUE() function returns a value evaluated
the first row within its partition, whereas the LAST_VALUE() function returns a value evaluated against the last row in its partition.
The following statement uses the FIRST_VALUE() to return the lowest price for every product group.

Слайд 15

The following statement uses the LAST_VALUE() function to return the highest price

The following statement uses the LAST_VALUE() function to return the highest price for every product group.
for every product group.

Слайд 16

The LAG and LEAD functions

The LAG() function has the ability to access

The LAG and LEAD functions The LAG() function has the ability to
data from the previous row, while the LEAD() function can access data from the next row.
Both LAG() and LEAD() functions have the same syntax as follows:

In this syntax:
- expression – a column or expression to compute the returned value.
- offset – the number of rows preceding ( LAG)/ following ( LEAD) the current row. It defaults to 1.
- default – the default returned value if the offset goes beyond the scope of the window. The default is NULL if you skip it.

Слайд 17

The following statement uses the LAG() function to return the prices from

The following statement uses the LAG() function to return the prices from
the previous row and calculates the difference between the price of the current row and the previous row.
Имя файла: window_func.pptx
Количество просмотров: 16
Количество скачиваний: 0