In SQL Server können Sie den TOP
verwenden -Klausel, um die von einer Abfrage zurückgegebenen Zeilen auf einen bestimmten Prozentsatz der Ergebnismenge zu begrenzen.
Beispielsweise könnten Sie die besten 10 % der Ergebnisse oder den gewünschten Prozentsatz zurückgeben.
Beispiel 1 – Der vollständige Ergebnissatz
Lassen Sie uns zuerst die vollständige Ergebnismenge zurückgeben:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
+-----------+--------------------------+ | 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 | +-----------+--------------------------+
Es gibt also 22 Zeilen in der vollständigen Ergebnismenge.
Beispiel 2 – Top 10 % der Ergebnisse zurückgeben
Lassen Sie uns nun die besten 10 Prozent dieser Ergebnisse zurückgeben:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
In diesem Fall werden drei Zeilen zurückgegeben.
Sie werden vielleicht bemerken, dass 10 Prozent von 22 tatsächlich 2,2 (nicht 3) sind. Offensichtlich kann SQL Server keine 2,2 Zeilen darstellen, also rundet es die Ergebnisse auf.
Beispiel 2 – Aufrunden statt Abrunden
Falls Sie sich fragen, warum SQL Server die Ergebnisse nicht ab rundet Immer wenn der Bruchteil kleiner als 5 ist, sehen Sie sich das folgende Beispiel an.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Denken Sie daran, dass die vollständige Ergebnismenge 22 Zeilen hatte, sodass 1 Prozent von 22 Zeilen bedeuten würde, dass 0,22 Zeilen zurückgegeben werden sollten.
Und genau deshalb möchten wir nicht abgerundet werden. Wenn 0,22 Zeilen abgerundet werden, werden keine Zeilen zurückgegeben, was uns fälschlicherweise zu dem Schluss führt, dass es keine Übereinstimmungen für unsere Abfrage gibt.
Beispiel 3 – Null Prozent
Wie Sie vielleicht erwarten, werden bei Verwendung von 0 Prozent null Zeilen zurückgegeben.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
(0 rows affected)
Beispiel 4 – Maximaler Prozentsatz
Sie können nur Prozentwerte zwischen 0 und 100 angeben.
Hier ist ein Beispiel für den Versuch, einen Wert über 100 zu verwenden:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Beispiel 5 – Negative Prozentsätze
Wie bereits erwähnt, müssen Prozentwerte zwischen 0 und 100 liegen, daher erhalten Sie eine Fehlermeldung, wenn Sie einen negativen Prozentsatz angeben.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Ergebnis:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.