Limiter les résultats triés

Effectué

La clause TOP est une extension propriétaire Microsoft de la clause SELECT. TOP vous permet de spécifier le nombre de lignes à retourner, sous la forme d’un entier positif ou d’un pourcentage de toutes les lignes correspondantes. Le nombre de lignes peut être spécifié sous la forme d’une constante ou d’une expression. TOP est le plus souvent utilisé avec une clause ORDER BY, mais peut aussi l’être avec des données non ordonnées.

Utilisation de la clause TOP

La syntaxe simplifiée de la clause TOP, utilisée avec ORDER BY, est la suivante :

SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];

Par exemple, pour récupérer uniquement les 10 produits les plus chers de la table Production.Product, utilisez la requête suivante :

SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

Les résultats devraient ressembler à ceci :

Nom

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Red, 52

3578.27

Road-150 Red, 56

3578.27

Mountain-100 Silver, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 Silver, 44

3399.99

Mountain-100 Silver, 48

3399.99

Mountain-100 Black, 38

3374.99

L’opérateur TOP dépend d’une clause ORDER BY pour fournir une précédence explicite aux lignes sélectionnées. TOP peut être utilisé sans ORDER BY, mais dans ce cas, il n’existe aucun moyen de prédire les lignes qui seront retournées. Dans cet exemple, 10 commandes peuvent être retournées dans un ordre quelconque à défaut de clause ORDER BY.

Utilisation de WITH TIES

En plus de spécifier un nombre fixe de lignes à retourner, le mot clé TOP accepte également l’option WITH TIES, qui récupère toutes les lignes dont les valeurs peuvent se trouver dans les N premières lignes sélectionnées.

Dans l’exemple précédent, la requête a renvoyé les 10 premiers produits dans l’ordre décroissant du prix. Toutefois, en ajoutant l’option WITH TIES à la clause TOP, vous verrez que davantage de lignes sont éligibles pour l’inclusion dans les 10 produits les plus chers :

SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

Cette requête modifiée renvoie les résultats suivants :

Nom

ListPrice

Road-150 Red, 62

3578.27

Road-150 Red, 44

3578.27

Road-150 Red, 48

3578.27

Road-150 Red, 52

3578.27

Road-150 Red, 56

3578.27

Mountain-100 Silver, 38

3399.99

Mountain-100 Silver, 42

3399.99

Mountain-100 Silver, 44

3399.99

Mountain-100 Silver, 48

3399.99

Mountain-100 Black, 38

3374.99

Mountain-100 Black, 42

3374.99

Mountain-100 Black, 44

3374.99

Mountain-100 Black, 48

3374.99

La décision d’inclure WITH TIES dépend de vos connaissances sur les données sources, de leur potentiel pour des valeurs uniques et des exigences de la requête que vous écrivez.

Utilisation de PERCENT

Pour retourner un pourcentage de lignes éligibles, utilisez l’option PERCENT avec TOP au lieu d’un nombre fixe.

SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;

Le pourcentage peut également être utilisé avec l’option WITH TIES.

Notes

Pour le comptage du nombre de lignes, TOP(N) PERCENT arrondit à l’entier supérieur le plus proche.

L’option TOP est utilisée par de nombreux professionnels SQL Server comme méthode pour récupérer uniquement une certaine plage de lignes. Toutefois, tenez compte des points suivants lors de l’utilisation de TOP :

  • TOP est une fonction propriétaire de T-SQL.
  • TOP à lui seul ne prend pas en charge la fonctionnalité permettant d’ignorer les lignes.
  • Comme TOP dépend d’une clause ORDER BY, vous ne pouvez pas utiliser un ordre de tri pour établir les lignes filtrées par TOP et une autre pour déterminer l’ordre de sortie.