Med SQL:s kommando ORDER BY kan du sortera sökre­sul­ta­ten efter dina in­di­vi­du­el­la behov, i stigande eller fallande ordning. Genom att sortera data i din måltabell i rader och kolumner kan du göra re­sul­ta­ten tydligare och mer läsbara. Det optimerar och påskyndar i sin tur dina da­taa­na­ly­ser och sökningar i komplexa da­ta­mäng­der.

Vad är SQL ORDER BY?

Du kan använda SQL ORDER BY för att sortera data och resultat från enkla eller komplexa da­ta­mäng­der. Kommandot gör det möjligt att definiera hur data ska ordnas i mål­ta­bel­len. Dessutom kan du ange om data ska sorteras i stigande eller fallande ordning. Så ORDER BY hjälper till att leverera sökre­sul­tat som är tydliga och lätta att läsa.

Som standard levererar ORDER BY resultat i stigande ordning, det vill säga från A–Z eller från minsta till största värde. Om du föredrar resultat i fallande ordning kan du använda det valfria nyc­kelor­det DESC. Du kan definiera en eller flera mål­ko­lum­ner för re­sul­ta­ten.

SQL ORDER BY är viktigt för att utföra or­ga­ni­se­ra­de, snabba sökningar. Det används ofta till­sam­mans med SELECT, WHERE och andra SQL-ope­ra­to­rer och funk­tio­ner som GROUP BY.

Tips

Vill du lära dig mer om SQL men vet inte var du ska börja? Vår in­tro­duk­tion till SQL med exempel gör det enkelt att börja lära sig detta populära da­ta­bas­språk.

Vad är syntaxen för SQL ORDER BY?

Syntaxen för SQL ORDER BY ser ut så här:

SELECT  ColumnA, ColumnB, …  or *
FROM  Table
ORDER BY  ColumnA, ColumnB, …  (optional: ASC or DESC)
sql
Notis

Om du bara anger en kolumn efter ORDER BY får du en kolumn med sorterade resultat. Om du anger fler än en kolumn sorteras re­sul­ta­ten baserat på kolumn A. Om kolumn A har identiska poster i vissa rader sorteras dessa rader baserat på kolumn B.

Du kan utöka denna syntax med yt­ter­li­ga­re ope­ra­to­rer och pa­ra­met­rar. En WHERE kan till exempel användas för att definiera kriterier som begränsar dina sökre­sul­tat. Syntaxen för ORDER BY i kom­bi­na­tion med WHERE ser ut så här:

SELECT  ColumnA, ColumnB, …  or *
FROM  Table
WHERE  ColumnA  =  'SearchCondition'
ORDER BY  ColumnA, ColumnB, …  (optional: ASC or DESC)
sql

Du kan också använda följande pa­ra­met­rar:

  • SELECT: Du kan använda SELECT för att ange vilka data du vill analysera. Använd en asterisk * för att söka i hela datasetet eller ange namnen på ko­lum­ner­na för att arbeta med dessa kolumner.
  • FROM: Anger vilken tabell du vill söka data från.
  • WHERE: WHERE är en valfri klausul för att definiera sök­kri­te­ri­er som begränsar dina resultat. Inom en WHERE kan du använda ope­ra­to­rer som =, LIKE eller NOT.
  • ORDER BY: De­fi­ni­e­rar vilken kolumn du vill sortera dina resultat efter. Om du inte lägger till ASC eller DESC sorteras re­sul­ta­ten som standard i stigande ordning.
Notis

Beroende på databasen sorterar ORDER BY NULL-värden au­to­ma­tiskt eller baserat på den valda sor­te­rings­ord­ning­en. I SQLite, MySQL och SQL Server behandlas NULL-värden som de lägsta värdena. Det innebär att de visas i början av stigande resultat. I Oracle och Post­greSQL behandlas NULL-värden som de högsta värdena. De visas därför i slutet av stigande resultat.

Vad kan SQL ORDER BY användas till?

Här är några praktiska an­vänd­nings­fall för SQL ORDER BY:

  • Sortera pro­duk­tin­for­ma­tion baserat på pro­dukt­namn, kategori eller pris
  • Sortera trans­ak­tio­ner efter belopp, datum eller namn
  • Sortera order efter belopp eller betyg
  • Sortera anställda efter lön, kontrakt, pre­sta­tion eller avdelning
  • Lista lager baserat på belopp eller namn
  • Sortera le­ve­ran­ser efter post­num­mer eller spår­nings­num­mer
  • Sortera kund­lis­tor efter region eller ålder

Exempel på SQL ORDER BY

Vi ska nu titta på tre exempel där vi använder ORDER BY.

Sortera produkter efter pris

I det här exemplet sorterar vi produkter från kategorin “Hår” i stigande ordning baserat på pris. Vi använder FROM och WHERE för att ange vilka artiklar vi vill sortera. Med ORDER BY och ASC anger vi att vi vill sortera dem i stigande ordning baserat på pris. Syntaxen ser ut så här:

SELECT  *
FROM  Products
WHERE  Category  = 'Hair'
ORDER BY  Price  ASC;
sql

Fil­tre­ring av kunder

Låt oss säga att du arbetar i en tabell som heter “Kunder” och vill sortera alla kunder från Stor­bri­tan­ni­en efter deras namn. Du vill sortera dem i omvänd al­fa­be­tisk ordning från Z till A, så du lägger till DESC till kommandot ORDER BY.

SELECT  *
FROM  Customers
WHERE  Country = 'UK'
ORDER BY  Name  DESC;
sql

Sortering baserat på flera ka­te­go­ri­er

I det här exemplet vill du sortera produkter från kategorin “Elekt­ro­nik” efter or­der­kvan­ti­tet. Om or­der­kvan­ti­te­ter­na är identiska vill du sortera dem efter vilket land ordern kommer från.

SELECT  *
FROM  Products
WHERE  Category  =  'Electronics'
ORDER BY  OrderQuantity ASC,  Country  DESC;
sql

Finns det al­ter­na­tiv till SQL ORDER BY?

Det finns inga al­ter­na­tiv till ORDER BY i SQL med samma funktion. GROUP BY är dock ett SQL-kommando som ofta används i kom­bi­na­tion med ORDER BY. GROUP BY kan användas för att gruppera poster baserat på ka­te­go­ri­er, och ORDER BY kan dessutom sortera dessa poster.

Ett exempel: Anta att du vill gruppera kundernas or­der­kvan­ti­te­ter efter land och sedan använda ag­gre­ge­rings­funk­tio­nen AVG för att sortera efter ge­nom­snitt­lig or­der­kvan­ti­tet. Syntaxen för detta skulle se ut som följer:

SELECT  Country, AVG(OrderQuantity)
FROM  Customers
WHERE  Category = 'Electronics'
GROUP BY  Country
ORDER BY  AVG(OrderQuantity) ASC;
sql

Du kan också använda en HAVING-klausul för att filtrera de sorterade posterna baserat på sök­kri­te­ri­er och villkor. LIMIT kan användas för att begränsa re­sul­tatupp­sätt­ning­en till ett visst antal.

Gå till huvudmeny