Slik sorterer du resultater med ORDER BY i SQL

Lær å sortere data med ORDER BY i SQL. Stigende, synkende og sortering på flere kolonner forklart. Gratis video og guide.

Du har hentet ut en liste med fakturaer, men rekkefølgen virker tilfeldig. Kanskje du vil se de nyeste først, eller sortere etter beløp fra høyest til lavest. Uten ORDER BY bestemmer databasen selv hvilken rekkefølge radene kommer i. Med ORDER BY tar du kontrollen.

ORDER BY sorterer resultatet av en spørring etter én eller flere kolonner. Det er det siste leddet i en SQL-spørring, og det påvirker bare visningen, ikke selve dataene.

Sortere i stigende rekkefølge

Den enkleste bruken av ORDER BY er å sortere etter én kolonne:

SELECT * FROM invoices ORDER BY total;

Denne returnerer alle fakturaer sortert etter totalbeløp, fra lavest til høyest. Stigende rekkefølge (ASC) er standard, så du trenger ikke skrive ASC eksplisitt. Men du kan gjøre det for tydelighets skyld:

SELECT * FROM invoices ORDER BY total ASC;

Resultatet er identisk. Noen foretrekker å alltid skrive ASC eller DESC for å gjøre spørringen lettere å lese, spesielt når man sorterer på flere kolonner.

Sortere i synkende rekkefølge

For å sortere fra høyest til lavest, legger du til DESC (descending):

SELECT * FROM invoices ORDER BY total DESC;

Nå får du fakturaene med de høyeste totalbeløpene først. DESC er nyttig når du vil finne toppverdier, nyeste datoer eller lignende.

Med datoer gir DESC deg de nyeste radene først:

SELECT * FROM invoices ORDER BY invoice_date DESC;

Dette er et vanlig mønster i rapportering. Du vil nesten alltid se de ferskeste dataene øverst.

Sortere på flere kolonner

Du kan sortere på flere kolonner ved å separere dem med komma. Databasen sorterer først på den første kolonnen, og bruker de neste kolonnene for å bryte uavgjort.

SELECT * FROM invoices ORDER BY customer_id, total DESC;

Denne sorterer først etter kunde-ID (stigende, som er standard), og deretter etter totalbeløp (synkende) innenfor hver kunde. Resultatet grupperer fakturaer per kunde, med de dyreste fakturaene øverst for hver kunde.

Du kan mikse ASC og DESC fritt mellom kolonnene. Hver kolonne får sin egen sorteringsretning:

SELECT * FROM invoices ORDER BY customer_id ASC, total DESC, invoice_date ASC;

Tekst sorteres alfabetisk

Når du sorterer på en tekstkolonne, bruker SQL alfabetisk rekkefølge:

SELECT * FROM customers ORDER BY last_name;

Store og små bokstaver kan påvirke sorteringen avhengig av databasen. I SQLite sorteres store bokstaver før små bokstaver som standard, mens andre databaser kan ha andre regler.

ORDER BY med WHERE

ORDER BY kombineres ofte med WHERE. Filtreringen skjer først, deretter sorteres resultatet:

SELECT * FROM invoices WHERE total > 5 ORDER BY total DESC;

Denne filtrerer først bort fakturaer med total under eller lik 5, og sorterer deretter de gjenværende radene etter beløp. Rekkefølgen i spørringen er viktig: WHERE kommer alltid før ORDER BY.

Du kan selvfølgelig kombinere med alle filtreringsoperatorer du har lært: LIKE, IN, BETWEEN og logiske operatorer som AND og OR.

Rekkefølgen i en SQL-spørring

ORDER BY er alltid den siste klausulen i en spørring (med unntak av LIMIT). Her er den vanlige rekkefølgen:

  1. SELECT (hvilke kolonner)
  2. FROM (hvilken tabell)
  3. WHERE (filtrering)
  4. GROUP BY (gruppering)
  5. HAVING (filtrering på grupper)
  6. ORDER BY (sortering)

Denne rekkefølgen er fast i SQL. Setter du ORDER BY før WHERE, får du en syntaksfeil.

Sortere etter kolonnenummer

Du kan referere til kolonner med nummer i stedet for navn:

SELECT customer_id, total FROM invoices ORDER BY 2 DESC;

Her sorteres det etter den andre kolonnen i SELECT (altså total). Dette er en snarvei som kan være praktisk i korte spørringer, men det gjør koden vanskeligere å lese. I de fleste tilfeller er det bedre å bruke kolonnenavnet direkte.

NULL-verdier i sortering

Kolonner med NULL-verdier sorteres ulikt i forskjellige databaser. I SQLite kommer NULL-verdier først ved stigende sortering og sist ved synkende. Andre databaser kan gjøre det motsatte. Vær oppmerksom på dette når du sorterer kolonner som kan inneholde tomme verdier.

LIMIT: begrens antall rader

ORDER BY brukes ofte sammen med LIMIT for å hente et bestemt antall rader. For eksempel: de 10 dyreste fakturaene.

SELECT * FROM invoices ORDER BY total DESC LIMIT 10;

LIMIT plasseres etter ORDER BY og angir maksimalt antall rader i resultatet. Kombinasjonen ORDER BY ... DESC LIMIT N er et svært vanlig mønster for å finne toppverdier, nyeste poster eller lignende. Uten ORDER BY er det tilfeldig hvilke rader LIMIT returnerer, så de to brukes nesten alltid sammen.

Vanlige feil med ORDER BY

  • Plassere ORDER BY før WHERE. SQL krever en bestemt rekkefølge på klausulene. WHERE må alltid komme før ORDER BY.
  • Glemme DESC. Uten DESC sorteres alt stigende. Vil du ha de høyeste verdiene først, må du skrive DESC eksplisitt.
  • Sortere på en kolonne som ikke finnes. Hvis du skriver ORDER BY feil_kolonne, får du en feilmelding. Dobbeltsjekk kolonnenavnet.

Neste steg

Med WHERE, LIKE, IN, BETWEEN og ORDER BY har du et solid grunnlag for filtrering og sortering i SQL. Neste steg er å lære GROUP BY for å gruppere rader og beregne aggregater som summer, gjennomsnitt og antall.

Denne videoen er hentet fra kurset SQL for nybegynnere på Utdannet.no. Kurset dekker alt fra grunnleggende spørringer til JOINs, med videoer og øvelser du kan jobbe med i eget tempo.