Sortering efter udtryk og aliaser
Hvor aliasreferencer er tilladt i ORDER BY, og hvordan De sorterer efter beregnet logik
Sortering efter udtryk og aliaser er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
ORDER BY er mere fleksibel, end du tror
Overraskende mange kandidater tror, at ORDER BY kun kan referere til almindelige kolonner. Faktisk kan du sortere efter udtryk, aliaser, kolonnepositioner og CASE-logik.
Interviewere bruger dette til at teste, om du forstår den logiske rækkefølge for udførelse af forespørgsler, fordi ORDER BY køres efter SELECT, hvilket er præcis grunden til, at aliaser fungerer her, men ikke i WHERE.
Hvorfor aliaser er tilladt i ORDER BY
Husk den logiske udførelsesrækkefølge: FROM, WHERE, GROUP BY, HAVING, SELECT og derefter ORDER BY. Fordi SELECT køres før ORDER BY, findes de kolonnealiaser, du definerede i SELECT, allerede, når ORDER BY evalueres.
Det er den præcise grund til, at et alias fungerer i ORDER BY, men fejler i WHERE — et spørgsmål, interviewere gerne kobler tilbage til udførelsesrækkefølgen.
SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY annual_pay DESC;Sortering efter et råt udtryk
Du kan også gentage hele udtrykket i ORDER BY i stedet for at bruge aliaset. Begge dele er gyldige, og resultatet er identisk.
Det er renere at bruge aliaset, og du undgår at duplikere logik, men nogle udviklingsteams foretrækker det eksplicitte udtryk af hensyn til tydeligheden. Begge svar er acceptable til en jobsamtale, så længe du kan begrunde dit valg.
SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY salary * 12 DESC;Sortering efter kolonneposition (ordinal)
Du kan sortere efter ordinalpositionen for et element på SELECT-listen: ORDER BY 2 sorterer efter den anden valgte kolonne. Det er kortfattet, men skrøbeligt, fordi en ændring af rækkefølgen på SELECT-listen lydløst ændrer sorteringen.
Råd til jobsamtalen: Du skal vide, at muligheden findes, og at den generelt frarådes i produktionskode af hensyn til læsbarhed og sikkerhed.
SELECT name, hire_date
FROM employees
ORDER BY 2 DESC;Sortering efter et beregnet CASE-udtryk
Et kraftfuldt mønster er at sortere efter et CASE-udtryk for at indføre en tilpasset, ikke-alfabetisk rækkefølge. Her viser vi højtlønnede først ved hjælp af en afledt prioritet.
CASE producerer en sorteringsrang, som ikke har sin egen kolonne; databasemotoren evaluerer den udelukkende med henblik på sortering.
SELECT name, salary
FROM employees
ORDER BY CASE WHEN salary >= 100000 THEN 0 ELSE 1 END,
salary DESC;Tilpasset kategorisk sortering
Statuskolonner sorteres sjældent meningsfuldt alfabetisk. "aktiv, afventende, lukket" sorteres alfabetisk som "aktiv, lukket, afventende", hvilket er forkert. Et CASE-udtryk knytter hver værdi til en bevidst valgt rang.
Dette er et almindeligt rapporteringskrav og en god måde at vise, at du kan styre rækkefølgen ud over den naturlige sortering.
SELECT id, status
FROM orders
ORDER BY CASE status
WHEN 'active' THEN 1
WHEN 'pending' THEN 2
WHEN 'closed' THEN 3
ELSE 4
END;Sortering efter resultatet af en funktion
Enhver skalarfunktion kan bruges i ORDER BY. Du kan f.eks. sortere uden forskel på store og små bogstaver med LOWER, sortere efter strenglængde eller efter en del af en dato.
Bemærk: Hvis du pakker en kolonne ind i en funktion under sorteringen, kan det forhindre databasemotoren i at bruge et indeks på kolonnen, ligesom det sker i WHERE.
SELECT name
FROM employees
ORDER BY LOWER(name) ASC;Aliaser kontra aggregater i GROUP BY-forespørgsler
I en grupperet forespørgsel sorterer du ofte efter et aggregat. Du kan referere til aggregatets alias i ORDER BY, igen fordi SELECT køres først.
Forespørgslen nedenfor tæller ordrer pr. kunde og sorterer efter dette antal i faldende rækkefølge ved hjælp af aliaset order_count.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;Fælden med navnekollisioner for aliaser
Et kanttilfælde, som interviewere godt kan lide: Hvad hvis dit alias har samme navn som en rigtig kolonne? De fleste databasemotorer fortolker et ubetinget navn i ORDER BY som aliaset fra SELECT-listen først, hvilket kan overraske dig.
Hvis du giver salary * 2 AS salary aliaset salary og derefter bruger ORDER BY salary, sorterer du efter den dobbelte værdi og ikke efter den underliggende kolonne. Undgå at genbruge kolonnenavne som aliaser for at slippe for denne tvetydighed.
SELECT salary * 2 AS salary
FROM employees
ORDER BY salary;Kombination af udtryk og sorteringsretninger
Du kan blande alle disse i én sætning: et udtryk, derefter et alias og så en almindelig kolonne, hver med sin egen retning. Eksemplet sorterer først efter et beregnet bonusniveau i faldende rækkefølge og derefter efter navn i stigende rækkefølge som afgørelse ved lige værdier.
At kombinere nøgler på denne måde er en grundlæggende byggesten i virkelige rapporteringsforespørgsler.
SELECT name, salary,
salary * 0.1 AS bonus
FROM employees
ORDER BY bonus DESC, name ASC;Forbehold om portabilitet
Selvom udtryk og aliaser i ORDER BY er bredt understøttet, er der nogle bemærkninger til jobsamtaler:
- Ordinalpositioner (
ORDER BY 2) er standard, men frarådes. - Aliasers synlighed i
ORDER BYer ensartet på tværs af de vigtigste databasemotorer, i modsætning til iWHERE/HAVING. SELECT DISTINCTbegrænser dig: Du kan kun brugeORDER BYpå udtryk, der findes i SELECT-listen.
Hurtigt tjek
Knyt aliasers synlighed til rækkefølgen af udførelsen.
Opsummering
Sortering efter udtryk og aliaser:
ORDER BYaccepterer aliaser, rå udtryk, funktioner,CASE-logik og positioner angivet med tal.- Aliaser fungerer, fordi
ORDER BYkøres efterSELECTi den logiske rækkefølge. - Brug
CASEtil tilpasset kategorisk sortering. - Undgå aliasnavne, der kolliderer med eksisterende kolonner, for at forhindre tvetydighed.
- Funktioner i sorteringsnøglen kan forhindre brug af indeks.
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “Sortering efter udtryk og aliaser” gratis?
Ja — hele teksten til “Sortering efter udtryk og aliaser” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Sortering efter udtryk og aliaser”?
Hvor aliasreferencer er tilladt i ORDER BY, og hvordan De sorterer efter beregnet logik Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Sortering efter udtryk og aliaser”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Sortering efter flere kolonner og placering af NULL
- LIMIT, OFFSET og FETCH FIRST
- Pålidelig returnering af de øverste N rækker
- Sortering efter udtryk og aliaser