Suche…


Verwenden Sie ORDER BY mit TOP, um die ersten x Zeilen basierend auf dem Wert einer Spalte zurückzugeben

In diesem Beispiel können wir nicht nur verwenden GROUP BY bestimmt die Art der zurückgegebenen Zeilen, sondern auch , welche Zeilen zurückgegeben werden , da wir TOP verwenden die Ergebnismenge zu begrenzen.

Nehmen wir an, wir möchten die Top 5 der besten Nutzer von einer ungenannten beliebten Q & A-Site zurückgeben.

Ohne ORDER BY

Diese Abfrage gibt die obersten 5 Zeilen nach Standard sortiert zurück. In diesem Fall handelt es sich um "Id", die erste Spalte in der Tabelle (obwohl dies keine in den Ergebnissen angezeigte Spalte ist).

SELECT TOP 5 DisplayName, Reputation
FROM Users

kehrt zurück...

Anzeigename Ruf
Gemeinschaft 1
Geoff Dalgas 12567
Jarrod Dixon 11739
Jeff Atwood 37628
Joel Spolsky 25784

Mit ORDER BY

SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc

kehrt zurück...

Anzeigename Ruf
JonSkeet 865023
Darin Dimitrov 661741
BalusC 650237
Hans Passant 625870
Marc Gravell 601636

Bemerkungen

Einige SQL-Versionen (wie MySQL) verwenden eine LIMIT Klausel am Ende einer SELECT anstelle von TOP am Anfang. Beispiel:

SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5

Sortierung nach mehreren Spalten

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Anzeigename Beitrittsdatum Ruf
Gemeinschaft 2008-09-15 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37628
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Sortierung nach Spaltennummer (statt Name)

Sie können die Nummer einer Spalte verwenden (wobei die Spalte ganz links "1" ist), um anzugeben, auf welcher Spalte die Sortierung basieren soll, anstatt die Spalte anhand ihres Namens zu beschreiben.

Pro: Wenn Sie der Meinung sind, dass Sie die Spaltennamen möglicherweise später ändern, wird der Code dadurch nicht beschädigt.

Con: Dies verringert im Allgemeinen die Lesbarkeit der Abfrage (Es ist sofort klar, was 'ORDER BY Reputation' bedeutet, während 'ORDER BY 14' etwas zählt, wahrscheinlich mit einem Finger auf dem Bildschirm.)

Diese Abfrage sortiert das Ergebnis anhand der Informationen in relativer Spaltenposition 3 aus der SELECT-Anweisung anstelle des Spaltennamens Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Anzeigename Beitrittsdatum Ruf
Gemeinschaft 2008-09-15 1
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567
Joel Spolsky 2008-09-16 25784
Jeff Atwood 2008-09-16 37628

Auftrag von Alias

Aufgrund der Reihenfolge der logischen Abfrageverarbeitung können Aliasnamen in der Reihenfolge nach verwendet werden.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep

Und kann die relative Reihenfolge der Spalten in der select-Anweisung verwenden. Beachten Sie dasselbe Beispiel wie oben, und verwenden Sie anstelle des Alias ​​die relative Reihenfolge wie für den Anzeigenamen 1, für Jd 2 und so weiter

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3

Angepasste Sortierreihenfolge

Um diese Tabelle Employee nach Abteilung zu sortieren, verwenden Sie ORDER BY Department . Wenn Sie jedoch eine andere Sortierreihenfolge wünschen, die nicht alphabetisch ist, müssen Sie die Department in verschiedene Werte einordnen, die korrekt sortiert werden. Dies kann mit einem CASE-Ausdruck erfolgen:

Name Abteilung
Hasan ES
Yusuf HR
Hillary HR
Joe ES
Fröhlich HR
Ken Buchhalter
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
Name Abteilung
Yusuf HR
Hillary HR
Fröhlich HR
Ken Buchhalter
Hasan ES
Joe ES


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow