Zoeken…
Gebruik ORDER BY met TOP om de bovenste x rijen te retourneren op basis van de waarde van een kolom
In dit voorbeeld kunnen we GROUP BY gebruiken, niet alleen bepaald het soort geretourneerde rijen, maar ook welke rijen worden geretourneerd, omdat we TOP gebruiken om de resultatenset te beperken.
Laten we zeggen dat we de top 5 van de beste reputatie-gebruikers willen terugbrengen van een naamloze populaire vraag- en antwoordsite.
Zonder BESTELLING DOOR
Deze query retourneert de standaard top 5 rijen, in dit geval "Id", de eerste kolom in de tabel (hoewel het geen kolom is die in de resultaten wordt weergegeven).
SELECT TOP 5 DisplayName, Reputation
FROM Users
geeft terug...
Weergavenaam | Reputatie |
---|---|
Gemeenschap | 1 |
Geoff Dalgas | 12567 |
Jarrod Dixon | 11739 |
Jeff Atwood | 37628 |
Joel Spolsky | 25784 |
Met BESTELLEN BIJ
SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc
geeft terug...
Weergavenaam | Reputatie |
---|---|
JonSkeet | 865.023 |
Darin Dimitrov | 661.741 |
BalusC | 650.237 |
Hans Passant | 625.870 |
Marc Gravell | 601.636 |
Opmerkingen
Sommige versies van SQL (zoals MySQL) gebruiken een LIMIT
clausule aan het einde van een SELECT
, in plaats van TOP
aan het begin, bijvoorbeeld:
SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5
Sorteren op meerdere kolommen
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY JoinDate, Reputation
Weergavenaam | JoinDate | Reputatie |
---|---|---|
Gemeenschap | 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 |
Sorteren op kolomnummer (in plaats van naam)
U kunt het nummer van een kolom gebruiken (waarbij de meest linkse kolom '1' is) om aan te geven op welke kolom de sortering moet worden gebaseerd, in plaats van de kolom bij zijn naam te beschrijven.
Pro: Als u denkt dat u waarschijnlijk later kolomnamen kunt wijzigen, zal deze code deze code niet breken.
Con: Dit zal in het algemeen de leesbaarheid van de zoekopdracht verminderen (het is meteen duidelijk wat 'ORDER BY Reputation' betekent, terwijl 'ORDER BY 14' enige telling vereist, waarschijnlijk met een vinger op het scherm.)
Deze query sorteert het resultaat op basis van de info in relatieve kolompositie 3
van select-instructie in plaats van kolomnaam Reputation
.
SELECT DisplayName, JoinDate, Reputation FROM Users ORDER BY 3
Weergavenaam | JoinDate | Reputatie |
---|---|---|
Gemeenschap | 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 |
Bestellen bij Alias
Vanwege de volgorde van de logische queryverwerking kan alias in volgorde worden gebruikt door.
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep
En kan de relatieve volgorde van de kolommen in de select-instructie gebruiken. Overweeg hetzelfde voorbeeld als hierboven en gebruik in plaats van alias de relatieve volgorde zoals voor weergavenaam het is 1, voor Jd is het 2 enzovoort
SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3
Aangepaste sorteervolgorde
Om deze tabel Employee
op afdeling te sorteren, gebruikt u ORDER BY Department
. Als u echter een andere sorteervolgorde wilt die niet alfabetisch is, moet u de Department
toewijzen aan verschillende waarden die correct sorteren; dit kan worden gedaan met een CASE-expressie:
Naam | afdeling |
---|---|
Hasan | HET |
Yusuf | HR |
Hillary | HR |
Joe | HET |
Vrolijk | HR |
gezichtskring | Accountant |
SELECT *
FROM Employee
ORDER BY CASE Department
WHEN 'HR' THEN 1
WHEN 'Accountant' THEN 2
ELSE 3
END;
Naam | afdeling |
---|---|
Yusuf | HR |
Hillary | HR |
Vrolijk | HR |
gezichtskring | Accountant |
Hasan | HET |
Joe | HET |