Sortera efter flera kolumner
Avgör lika resultat med sekundära sorteringsnycklar.
Sortera efter flera kolumner är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.
Problemet med lika värden
När ni sorterar efter en enda kolumn har rader med samma värde ingen definierad inbördes ordning. Tre produkter som alla kostar 20 kan returneras i vilken ordning som helst.
För att göra ordningen helt förutsägbar lägger ni till en andra sorteringsnyckel.
-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;Lista flera sorteringsnycklar
ORDER BY accepterar en kommaseparerad lista med kolumner. Databasen sorterar efter den första kolumnen och bryter sedan lika värden med den andra, och så vidare.
Här sorteras produkterna efter pris; lika priser avgörs alfabetiskt efter namn.
SELECT name, price
FROM products
ORDER BY price, name;Nycklarnas ordning spelar roll
Kolumnernas ordningsföljd förändrar resultatet. ORDER BY price, name är inte samma sak som ORDER BY name, price.
Den första nyckeln är den primära sorteringen; senare nycklar används endast när de tidigare har lika värden.
-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;Riktning per kolumn
Varje sorteringsnyckel kan ha sin egen riktning. Blanda ASC och DESC fritt.
Detta grupperar efter kategori i alfabetisk ordning, men visar de dyraste artiklarna först inom varje kategori.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;DESC gäller per kolumn
Ett vanligt misstag är att tro att DESC i slutet vänder på allt. Det påverkar endast den kolumn som det står direkt efter.
I ORDER BY category, price DESC är category fortfarande stigande; endast price är fallande.
-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;Tre eller fler nycklar
Ni kan kedja så många sorteringsnycklar som behövs. Varje nyckel börjar gälla först när alla föregående nycklar har lika värden.
Sortera beställningar efter datum, sedan efter kund och därefter efter totalsumma för samma kund och datum.
SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;En stabil, deterministisk sortering
För ett helt deterministiskt resultat avslutar ni sorteringsnycklarna med en unik kolumn, till exempel primärnyckeln. Då kan inga två rader få samma sorteringsvärde.
Detta är viktigt för paginering, som ni får se i nästa lektion.
SELECT id, name, price
FROM products
ORDER BY price DESC, id;Blanda uttryck och kolumner
Sorteringsnycklar kan vara en blandning av vanliga kolumner och uttryck. Varje nyckel är oberoende.
Detta sorterar efter lagervärde i fallande ordning och sedan alfabetiskt efter namn som skiljekriterium.
SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;Sortera efter en boolesk kolumn för att flytta en grupp
Ett användbart knep är att sortera efter ett booleskt uttryck för att flytta en grupp till början eller slutet. I PostgreSQL sorteras false före true.
Detta visar artiklar som finns i lager (stock > 0) först och sedan de billigaste inom varje grupp.
SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;Bestäm placeringen av NULL
Som standard sorteras NULL i PostgreSQL sist vid stigande ordning och först vid fallande ordning. Åsidosätt detta med NULLS FIRST eller NULLS LAST för valfri nyckel.
SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;Sätt ihop allt
En realistisk sortering med flera nycklar kan kombinera riktning, uttryck och hantering av NULL-värden. Läs den från vänster till höger: varje nyckel förfinar den föregående.
SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
rating DESC NULLS LAST,
price ASC;Snabbkontroll
Betrakta ORDER BY category, price DESC.
Sammanfattning
Sortering efter flera kolumner i korthet:
- Lista sorteringsnycklar kommaseparerade; tidigare nycklar har företräde
- Varje nyckel har sin egen
ASC/DESC - Avsluta med en unik kolumn för en deterministisk ordning
- Bestäm hur saknade värden hanteras med
NULLS FIRST/NULLS LAST
I nästa del begränsar ni hur många rader som returneras med LIMIT och OFFSET.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;Lär dig SQL med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 46
- Lektioner
- 183
Vanliga frågor
Är lektionen ”Sortera efter flera kolumner” gratis?
Ja – hela texten till ”Sortera efter flera kolumner” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Sortera efter flera kolumner”?
Avgör lika resultat med sekundära sorteringsnycklar. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig SQL Academy?
Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Sortera efter flera kolumner”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här SQL Academy-lektionen?
Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Sortera med ORDER BY
- Sortera efter flera kolumner
- LIMIT och OFFSET
- Hitta de N främsta posterna