Sommaire

Les fonctions de fenêtrage

Les fonctions de fenêtrage permettent de ranger des lignes ou d’effectuer des calculs sur des sous-groupes après avoir partitionné des enregistrements.

1. Numérotation séquentielle et rangement de lignes

Ce sont les fonctions qui permettent de ranger des lignes. RANK permet de numéroter des lignes dans un ordre. DENSE_RANK permet de numéroter les lignes dans un ordre avec des numéros à suivre. ROW_NUMBER permet de numéroter des lignes avec des numéros à suivre, telle une suite. La numérotation peut être effectuée sur des sous-groupes d’enregistrements.

Voici des exemples de numérotation de la table tarifs par prix, sans et avec partitionnement par type de chambre.

Exemples pour SQL Server, Oracle et PostgreSQL

SELECT Hotel, typeChambre, Prix, RANK() OVER(ORDER BY Prix DESC) 
AS Numero, DENSE_RANK() OVER(ORDER BY Prix DESC) AS NumeroASuivre, 
ROW_NUMBER() OVER(ORDER BY Prix DESC) AS Suite FROM Tarifs;

Hotel

typeChambre

Prix

Numero

NumeroASuivre

Suite

2

7

103,49

1

1

1

3

7

103,49

1

1

2

1

7

103,49

1

1

3

4

7

103,49

1

1

4

4

6

91,99

5

2

5

1

6

91,99

5

2

6

SELECT Hotel, typeChambre, Prix 
, RANK() OVER(PARTITION BY TypeChambre ORDER BY Prix DESC) AS Numero 
, DENSE_RANK() OVER(PARTITION BY TypeChambre ORDER BY Prix DESC) AS 
NumeroASuivre 
, ROW_NUMBER() OVER(PARTITION BY TypeChambre ORDER BY Prix DESC) AS Suite 
FROM Tarifs;

Hotel

typeChambre

Prix

Numero

NumeroASuivre

Suite

1

1

58,49

1

1

1

2

1

57,49

2

2

2

3

1

57,49 ...