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 |