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 |