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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow