Begrenzen der sortierten Ergebnisse

Abgeschlossen

Die TOP-Klausel ist eine proprietäre Microsoft-Erweiterung der SELECT-Klausel. Mit TOP können Sie angeben, wie viele Zeilen zurückgegeben werden sollen, entweder als positive ganze Zahl oder als Prozentsatz aller betroffenen Zeilen. Die Anzahl der Zeilen kann als Konstante oder als Ausdruck angegeben werden. TOP wird am häufigsten mit ORDER BY verwendet, kann jedoch auch mit unsortierten Daten verwendet werden.

Verwenden der TOP-Klausel

Die vereinfachte Syntax der TOP-Klausel, die mit ORDER BY verwendet wird, lautet wie folgt:

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

Verwenden Sie beispielsweise die folgende Abfrage, um nur die 10 teuersten Produkte aus der Production.Product-Tabelle abzurufen:

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

Die Ergebnisse könnten ungefähr so aussehen:

Name

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

Der TOP-Operator ist von einer ORDER BY-Klausel abhängig, um für ausgewählten Zeilen eine sinnvolle Rangfolge zu bieten. TOP kann ohne ORDER BY verwendet werden, aber in diesem Fall gibt es keine Möglichkeit, vorherzusagen, welche Zeilen zurückgegeben werden. In diesem Beispiel könnten beliebige 10 Bestellungen zurückgegeben werden, wenn es keine ORDER BY-Klausel gäbe.

Verwenden von WITH TIES

Zusätzlich zur Angabe einer festen Anzahl von Zeilen, die zurückgegeben werden sollen, akzeptiert das Schlüsselwort TOP auch die Option WITH TIES, die alle Zeilen mit Werten abruft, die in den ausgewählten ersten N Zeilen gefunden werden.

Im vorherigen Beispiel hat die Abfrage die ersten 10 Produkte in absteigender Reihenfolge des Preises zurückgegeben. Wenn Sie der TOP-Klausel jedoch die WITH TIES-Option hinzufügen, erkennen Sie, dass mehr Zeilen für die Aufnahme in die 10 teuersten Produkte qualifiziert sind:

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

Dies geänderte Abfrage gibt die folgenden Ergebnisse zurück:

Name

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

Die Entscheidung, WITH TIES einzubeziehen, hängt von Ihrem Wissen über die Quelldaten, ihrem Potenzial für eindeutige Werte und den Anforderungen der Abfrage ab, die Sie schreiben.

Verwenden von PERCENT

Um einen Prozentsatz der in Frage kommenden Zeilen zurückzugeben, verwenden Sie die PERCENT-Option mit TOP anstelle einer festen Anzahl.

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

PERCENT kann auch mit der WITH TIES-Option verwendet werden.

Hinweis

Für die Zeilenanzahl wird TOP (N) PERCENT auf die nächste ganze Zahl aufgerundet.

Die TOP-Option wird von vielen SQL Server-Experten als Methode zum Abrufen nur eines bestimmten Zeilenbereichs verwendet. Berücksichtigen Sie jedoch die folgenden Fakten, wenn Sie TOP verwenden:

  • TOP ist proprietär für T-SQL.
  • TOP allein unterstützt das Überspringen von Zeilen nicht.
  • Da TOP von einer ORDER BY-Klausel abhängt, können Sie nicht eine Sortierreihenfolge verwenden, um die nach TOP gefilterten Zeilen festzulegen, und eine andere, um die Ausgabereihenfolge zu bestimmen.