Statistiques récapitulatives et fonctions de fenêtrage PostgreSQL
Michel Semaan
Data Scientist
LAG(column, n) renvoie la valeur de column à la ligne située n lignes avant la ligne actuelleLEAD(column, n) renvoie la valeur decolumn à la ligne située n lignes après la ligne actuelleFIRST_VALUE(column) renvoie la première valeur du tableau ou de la partitionLAST_VALUE(column) renvoie la dernière valeur du tableau ou de la partitionRequête
WITH Hosts AS (
SELECT DISTINCT Year, City
FROM Summer_Medals)
SELECT
Year, City,
LEAD(City, 1) OVER (ORDER BY Year ASC)
AS Next_City,
LEAD(City, 2) OVER (ORDER BY Year ASC)
AS After_Next_City
FROM Hosts
ORDER BY Year ASC;
Résultat
| Year | City | Next_City | After_Next_City |
|------|-----------|-----------|-----------------|
| 1896 | Athens | Paris | St Louis |
| 1900 | Paris | St Louis | London |
| 1904 | St Louis | London | Stockholm |
| 1908 | London | Stockholm | Antwerp |
| 1912 | Stockholm | Antwerp | Paris |
| ... | ... | ... | ... |
Requête
SELECT
Year, City,
FIRST_VALUE(City) OVER
(ORDER BY Year ASC) AS First_City,
LAST_VALUE(City) OVER (
ORDER BY Year ASC
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS Last_City
FROM Hosts
ORDER BY Year ASC;
Résultat
| Year | City | First_City | Last_City |
|------|-----------|------------|-----------------|
| 1896 | Athens | Athens | London |
| 1900 | Paris | Athens | London |
| 1904 | St Louis | Athens | London |
| 1908 | London | Athens | London |
| 1912 | Stockholm | Athens | London |
RANGE BETWEEN ... étend la fenêtre jusqu'à la fin du tableau/partitionLEAD(Champion, 1) sans PARTITION BY| Year | Event | Champion | Next_Champion |
|------|--------------|----------|---------------|
| 2004 | Discus Throw | LTU | EST |
| 2008 | Discus Throw | EST | GER |
| 2012 | Discus Throw | GER | SWE |
| 2004 | Triple Jump | SWE | POR |
| 2008 | Triple Jump | POR | USA |
| 2012 | Triple Jump | USA | null |
LEAD(Champion, 1) avec PARTITION BY Event| Year | Event | Champion | Next_Champion |
|------|--------------|----------|---------------|
| 2004 | Discus Throw | LTU | EST |
| 2008 | Discus Throw | EST | GER |
| 2012 | Discus Throw | GER | null |
| 2004 | Triple Jump | SWE | POR |
| 2008 | Triple Jump | POR | USA |
| 2012 | Triple Jump | USA | null |
FIRST_VALUE(Champion) sans PARTITION BY Event| Year | Event | Champion | First_Champion |
|------|--------------|----------|----------------|
| 2004 | Discus Throw | LTU | LTU |
| 2008 | Discus Throw | EST | LTU |
| 2012 | Discus Throw | GER | LTU |
| 2004 | Triple Jump | SWE | LTU |
| 2008 | Triple Jump | POR | LTU |
| 2012 | Triple Jump | USA | LTU |
FIRST_VALUE(Champion) avec PARTITION BY Event| Year | Event | Champion | First_Champion |
|------|--------------|----------|----------------|
| 2004 | Discus Throw | LTU | LTU |
| 2008 | Discus Throw | EST | LTU |
| 2012 | Discus Throw | GER | LTU |
| 2004 | Triple Jump | SWE | SWE |
| 2008 | Triple Jump | POR | SWE |
| 2012 | Triple Jump | USA | SWE |
Statistiques récapitulatives et fonctions de fenêtrage PostgreSQL