Dans SQL Server, vous pouvez utiliser le TOP
clause pour limiter les lignes renvoyées par une requête à un certain pourcentage du jeu de résultats.
Par exemple, vous pouvez renvoyer les 10 % des meilleurs résultats, ou le pourcentage dont vous avez besoin.
Exemple 1 - L'ensemble de résultats complet
Commençons par renvoyer le jeu de résultats complet :
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
+-----------+--------------------------+ | AlbumId | AlbumName | |-----------+--------------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | | 21 | Yo Wassup | | 22 | Busted | +-----------+--------------------------+
Il y a donc 22 lignes dans le jeu de résultats complet.
Exemple 2 – Renvoie les 10 % des meilleurs résultats
Renvoyons maintenant les 10 % supérieurs de ces résultats :
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
Dans ce cas, trois lignes sont renvoyées.
Vous remarquerez peut-être que 10 % de 22 est en fait 2,2 (et non 3). Évidemment, SQL Server ne peut pas présenter 2,2 lignes, il arrondit donc les résultats.
Exemple 2 – Arrondir vers le haut au lieu de vers le bas
Au cas où vous vous demanderiez pourquoi SQL Server n'arrondit pas les résultats vers le bas chaque fois que la partie fractionnaire est inférieure à 5, regardez l'exemple suivant.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
N'oubliez pas que le jeu de résultats complet comportait 22 lignes, donc 1 % de 22 lignes signifierait que 0,22 lignes devraient être renvoyées.
Et c'est précisément pourquoi nous ne voudrions pas être arrondis. Si 0,22 lignes sont arrondies à l'inférieur, aucune ligne ne sera renvoyée, ce qui nous amènera à tort à conclure qu'il n'y a pas de correspondance pour notre requête.
Exemple 3 - Zéro pour cent
Comme vous vous en doutez, l'utilisation de 0 % renverra zéro ligne.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
(0 rows affected)
Exemple 4 - Pourcentage maximum
Vous ne pouvez fournir que des pourcentages compris entre 0 et 100.
Voici un exemple d'essai d'utilisation d'une valeur supérieure à 100 :
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Exemple 5 – Pourcentages négatifs
Comme mentionné, les valeurs de pourcentage doivent être comprises entre 0 et 100, vous obtiendrez donc une erreur si vous fournissez un pourcentage négatif.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Résultat :
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.