Sök…


Använd ORDER BY med TOP för att returnera de översta raderna baserat på en kolumns värde

I det här exemplet kan vi använda GROUP BY inte bara bestämt slags raderna tillbaka, men också vad rader returneras, eftersom vi använder TOP för att begränsa sökresultatet.

Låt oss säga att vi vill returnera de fem bästa användarna med högsta rykte från en namngivna populär Q & A-webbplats.

Utan beställning av

Denna fråga returnerar de 5 bästa raderna som beställts som standard, vilket i detta fall är "Id", den första kolumnen i tabellen (även om det inte är en kolumn som visas i resultaten).

SELECT TOP 5 DisplayName, Reputation
FROM Users

avkastning ...

Displayname Rykte
gemenskap 1
Geoff Dalgas 12567
Jarrod Dixon 11739
Jeff Atwood 37.628
Joel Spolsky 25784

Med ORDER BY

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

avkastning ...

Displayname Rykte
JonSkeet 865.023
Darin Dimitrov 661.741
BalusC 650.237
Hans Passant 625.870
Marc Gravell 601.636

Anmärkningar

Vissa versioner av SQL (som MySQL) använder en LIMIT klausul i slutet av en SELECT , istället för TOP i början, till exempel:

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

Sortering efter flera kolumner

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Displayname JoinDate Rykte
gemenskap 2008-09-15 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37.628
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Sortera efter kolumnnummer (istället för namn)

Du kan använda kolumnens nummer (där den vänstra kolumnen är '1') för att ange vilken kolumn du ska basera sorteringen på i stället för att beskriva kolumnen med dess namn.

Pro: Om du tror att det är troligt att du kan ändra kolumnnamn senare kommer det inte att bryta den här koden.

Nackdelar: Detta minskar i allmänhet läsbarheten för frågan (det är direkt klart vad 'ORDER BY Reputation' betyder, medan 'ORDER BY 14' kräver lite räkning, antagligen med ett finger på skärmen.)

Denna fråga sorteras efter informationen i relativ kolumnposition 3 från valt uttalande istället för kolumnnamn Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Displayname JoinDate Rykte
gemenskap 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 37.628

Beställ av Alias

På grund av den logiska frågeställningen kan alias användas i ordning efter.

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

Och kan använda relativ ordning på kolumnerna i markeringssatsen. Överväg samma exempel som ovan och i stället för att använda alias använd den relativa ordningen som för visningsnamn är den 1, för Jd är den 2 och så vidare

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

Anpassad sorteringsordning

För att sortera denna tabell Employee efter avdelning skulle du använda ORDER BY Department . Men om du vill ha en annan sorteringsordning som inte är alfabetisk, måste du kartlägga Department i olika värden som sorterar korrekt; detta kan göras med ett CASE-uttryck:

namn Avdelning
Hasan DEN
Yusuf HR
Hillary HR
Joe DEN
Glad HR
ken Revisor
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
namn Avdelning
Yusuf HR
Hillary HR
Glad HR
ken Revisor
Hasan DEN
Joe DEN


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow