In SQL Server kunt u de TOP
. gebruiken clausule om de rijen die door een zoekopdracht worden geretourneerd te beperken tot een bepaald percentage van de resultatenset.
U kunt bijvoorbeeld de top 10% van de resultaten retourneren, of welk percentage u ook nodig heeft.
Voorbeeld 1 – De volledige resultatenset
Laten we eerst de volledige resultatenset retourneren:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
+-----------+--------------------------+ | 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 | +-----------+--------------------------+
Er zijn dus 22 rijen in de volledige resultatenset.
Voorbeeld 2 – Top 10% van de resultaten retourneren
Laten we nu de top 10 procent van die resultaten teruggeven:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
In dit geval worden drie rijen geretourneerd.
Je merkt misschien dat 10 procent van 22 eigenlijk 2,2 is (niet 3). Het is duidelijk dat SQL Server geen 2.2 rijen kan presenteren, dus rondt het de resultaten naar boven af.
Voorbeeld 2 – Naar boven afronden in plaats van naar beneden
Voor het geval je je afvraagt waarom SQL Server de resultaten niet naar beneden afrondt wanneer het breukdeel kleiner is dan 5, kijk dan eens naar het volgende voorbeeld.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Onthoud dat de volledige resultatenset 22 rijen had, dus 1 procent van 22 rijen zou betekenen dat 0,22 rijen moeten worden geretourneerd.
En juist daarom willen we niet naar beneden afgerond worden. Als 0,22 rijen naar beneden worden afgerond, zouden er geen rijen worden geretourneerd, waardoor we ten onrechte tot de conclusie zouden komen dat er geen overeenkomsten waren voor onze zoekopdracht.
Voorbeeld 3 – Nul procent
Zoals je zou verwachten, levert het gebruik van 0 procent nul rijen op.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
(0 rows affected)
Voorbeeld 4 – Maximaal percentage
U kunt alleen percentages tussen 0 en 100 opgeven.
Hier is een voorbeeld van het proberen om een waarde hoger dan 100 te gebruiken:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Voorbeeld 5 – Negatieve percentages
Zoals vermeld, moeten percentagewaarden tussen 0 en 100 liggen, dus u krijgt een foutmelding als u een negatief percentage opgeeft.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultaat:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.