Sortere etter uttrykk og aliaser
Hvor aliasreferanser er tillatt i ORDER BY, og hvordan du sorterer etter beregnet logikk.
Sortere etter uttrykk og aliaser er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
ORDER BY er mer fleksibel enn du tror
Overraskende mange kandidater tror at ORDER BY bare kan referere til vanlige kolonner. I virkeligheten kan du sortere etter uttrykk, aliaser, kolonneposisjoner og CASE-logikk.
Intervjuere bruker dette for å teste om du forstår den logiske rekkefølgen for spørringskjøring, fordi ORDER BY kjøres etter SELECT. Det er nettopp derfor aliaser fungerer her, men ikke i WHERE.
Hvorfor aliaser er lovlige i ORDER BY
Husk den logiske kjøringsrekkefølgen: FROM, WHERE, GROUP BY, HAVING, SELECT, og deretter ORDER BY. Fordi SELECT kjøres før ORDER BY, finnes kolonnealiasene du definerte i SELECT allerede når ORDER BY evalueres.
Det er den presise grunnen til at et alias fungerer i ORDER BY, men mislykkes i WHERE – et spørsmål intervjuere gjerne knytter tilbake til kjøringsrekkefølgen.
SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY annual_pay DESC;Sortering etter et direkte uttrykk
Du kan også gjenta hele uttrykket i ORDER BY i stedet for å bruke aliaset. Begge deler er gyldig, og resultatet er identisk.
Det er ryddigere å bruke aliaset og du unngår å duplisere logikk, men noen team foretrekker det eksplisitte uttrykket for tydelighetens skyld. Begge svar er akseptable i et intervju så lenge du kan begrunne valget.
SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY salary * 12 DESC;Sortering etter kolonneposisjon (ordinal)
Du kan sortere etter ordinalposisjonen til et element i select-listen: ORDER BY 2 sorterer etter den andre valgte kolonnen. Det er kortfattet, men skjørt, fordi en omorganisering av SELECT-listen i stillhet endrer sorteringen.
Intervjutips: Vit at dette finnes, og at det vanligvis frarådes i produksjonskode av hensyn til lesbarhet og sikkerhet.
SELECT name, hire_date
FROM employees
ORDER BY 2 DESC;Sortering etter en beregnet CASE
Et kraftig mønster er å sortere etter et CASE-uttrykk for å påtvinge en egendefinert, ikke-alfabetisk rekkefølge. Her viser vi de høyest lønnede først ved hjelp av en beregnet prioritet.
CASE produserer en sorteringsrangering som ikke har noen egen kolonne; motoren evaluerer den utelukkende for sorteringens skyld.
SELECT name, salary
FROM employees
ORDER BY CASE WHEN salary >= 100000 THEN 0 ELSE 1 END,
salary DESC;Egendefinert kategorisk sortering
Statuskolonner sorteres sjelden fornuftig alfabetisk. «active, pending, closed» sorteres alfabetisk som «active, closed, pending», noe som er feil. En CASE tilordner hver verdi en ønsket rang.
Dette er et vanlig krav i rapporter og en ryddig måte å vise at du kan styre rekkefølgen utover den naturlige sorteringen.
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 etter resultatet av en funksjon
Alle skalarfunksjoner kan brukes i ORDER BY. Du kan for eksempel sortere uten å skille mellom store og små bokstaver med LOWER, eller sortere etter tekstlengde eller en del av en dato.
Merk: Hvis du pakker inn en kolonne i en funksjon under sorteringen, kan det hindre motoren i å bruke en indeks på kolonnen, på samme måte som i WHERE.
SELECT name
FROM employees
ORDER BY LOWER(name) ASC;Aliaser og aggregater i GROUP BY-spørringer
I en gruppert spørring sorterer du ofte etter et aggregat. Du kan referere til aggregatets alias i ORDER BY, igjen fordi SELECT kjøres først.
Spørringen nedenfor teller ordrer per kunde og sorterer etter antallet i synkende rekkefølge ved hjelp av aliaset order_count.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;Fellen med kollisjon mellom alias og kolonnenavn
Et spesialtilfelle intervjuere liker: Hva om aliaset har samme navn som en faktisk kolonne? De fleste motorer tolker et ubestemt navn i ORDER BY som aliaset i select-listen først, noe som kan overraske deg.
Hvis du gir salary * 2 AS salary aliaset salary og deretter bruker ORDER BY salary, sorterer du etter den doble verdien, ikke den underliggende kolonnen. Unngå å bruke kolonnenavn på nytt som aliaser for å unngå denne tvetydigheten.
SELECT salary * 2 AS salary
FROM employees
ORDER BY salary;Kombinere uttrykk og retninger
Du kan kombinere alt dette i én klausul: først et uttrykk, deretter et alias og til slutt en vanlig kolonne, hver med sin egen retning. Eksempelet sorterer først etter et beregnet bonusnivå i synkende rekkefølge og deretter etter navn i stigende rekkefølge som tie-breaker.
Å legge nøklene oppå hverandre på denne måten er grunnleggende arbeid i virkelige rapportspørringer.
SELECT name, salary,
salary * 0.1 AS bonus
FROM employees
ORDER BY bonus DESC, name ASC;Portabilitetsforbehold
Selv om uttrykk og aliaser i ORDER BY støttes av de fleste systemer, er det noen ting å merke seg i intervjuer:
- Ordinalposisjoner (
ORDER BY 2) er standard, men frarådes. - Alias-synlighet i
ORDER BYer konsistent på tvers av de viktigste motorene, i motsetning til iWHERE/HAVING. SELECT DISTINCTlegger begrensninger på deg: Du kan bare brukeORDER BYpå uttrykk som finnes i select-listen.
Hurtigsjekk
Knytt alias-synlighet til kjøringsrekkefølgen.
Oppsummering
Sortering etter uttrykk og aliaser:
ORDER BYgodtar aliaser, råuttrykk, funksjoner,CASE-logikk og ordinale posisjoner.- Aliaser fungerer fordi
ORDER BYkjøres etterSELECTi den logiske rekkefølgen. - Bruk
CASEfor egendefinert kategorisk sortering. - Unngå aliasnavn som kolliderer med faktiske kolonner, for å hindre tvetydighet.
- Funksjoner i sorteringsnøkkelen kan hindre bruk av indekser.
Lær deg Forberedelse til kodeintervjuer med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 90
- Leksjoner
- 360
Ofte stilte spørsmål
Er leksjonen «Sortere etter uttrykk og aliaser» gratis?
Ja – hele teksten i «Sortere etter uttrykk og aliaser» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Sortere etter uttrykk og aliaser»?
Hvor aliasreferanser er tillatt i ORDER BY, og hvordan du sorterer etter beregnet logikk. Du øver på Forberedelse til kodeintervjuer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Forberedelse til kodeintervjuer?
Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Sortere etter uttrykk og aliaser»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Forberedelse til kodeintervjuer-leksjonen?
Ja. Alle Forberedelse til kodeintervjuer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Sortering på flere kolonner og plassering av NULL
- LIMIT, OFFSET og FETCH FIRST
- Returnere de øverste N radene pålitelig
- Sortere etter uttrykk og aliaser