Find de øverste N poster
Find de højeste og laveste værdier.
Find de øverste N poster er en gratis SQL Academy-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 SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad er en Top-N-forespørgsel
En Top-N-forespørgsel besvarer spørgsmål som „de 3 dyreste produkter“, „de 10 nyeste ordrer“ eller „de 5 laveste resultater“.
Det er blot sortering kombineret med en begrænsning, men det er så almindeligt, at det fortjener et navn.
-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;De N laveste poster
For de mindste værdier skal du vende retningen. Sortér med ASC, og tag de første N for at få de billigste, ældste eller laveste rækker.
-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;Tilføjelse af en tie-breaker
Hvis flere rækker har samme værdi ved grænsen, vælger databasen vilkårligt blandt dem. Tilføj en unik sekundær nøgle, så resultatet bliver stabilt og reproducerbart.
SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Top-N efter filtrering
Top-N fungerer på det filtrerede resultatsæt. Sæt først en WHERE-klausul ind for at begrænse kandidaterne, og sortér og begræns derefter resultatet.
Det finder de 3 dyreste produkter i kategorien 'Bøger'.
SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;Top-N efter aggregering
Du kan også rangere beregnede værdier. Gruppér, beregn aggregater, og sortér derefter efter aggregatet og begræns resultatet.
Det returnerer de 5 kunder, der samlet har brugt flest penge.
SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;Tilgangen med rangeringsfunktioner
Vinduesfunktioner som ROW_NUMBER() tildeler hver række en rang. Indlejr forespørgslen, og behold de rækker, hvor rangen er lav. Det kan udvides til „Top-N pr. gruppe“.
SELECT name, price
FROM (
SELECT name, price,
ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
FROM products
) ranked
WHERE rn <= 3;RANK kontra ROW_NUMBER ved lige placeringer
ROW_NUMBER() giver altid forskellige numre, så den returnerer præcis N rækker, selv når værdierne er lige. RANK() giver rækker med samme værdi det samme nummer, så „top 3“ kan returnere mere end 3 rækker, hvis der er lige placeringer på tredjepladsen.
SELECT name, price,
RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;Top-N pr. gruppe
Hvis du vil hente det bedste produkt i hver kategori, skal du opdele rangeringen efter kategori. PARTITION BY starter nummereringen forfra for hver gruppe.
SELECT category, name, price
FROM (
SELECT category, name, price,
ROW_NUMBER() OVER (
PARTITION BY category
ORDER BY price DESC
) AS rn
FROM products
) t
WHERE rn = 1;DISTINCT ON for én række pr. gruppe
PostgreSQLs DISTINCT ON er en kompakt måde at vælge den bedste række pr. gruppe på. Angiv grupperingskolonnen, og sortér derefter, så den ønskede række kommer først i hver gruppe.
SELECT DISTINCT ON (category)
category, name, price
FROM products
ORDER BY category, price DESC;Inkludering af lige placerede med WITH TIES
Hvis du vil have de 3 bedste rækker samt alle rækker, der har samme værdi som den tredje, skal du bruge standarden FETCH ... WITH TIES. Den returnerer 3 rækker plus ekstra rækker, der har samme værdi som den sidste.
SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;En enkelt højeste værdi
Hvis du kun skal have rækken med den højeste eller laveste værdi, er ORDER BY ... LIMIT 1 det enkleste mønster. Det er tydeligere og ofte hurtigere end en underforespørgsel med MAX().
-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;Hurtigt tjek
Du vil have de 3 højeste priser, men hvis flere rækker har samme pris på tredjepladsen, vil du have alle med.
Opsummering
Du kan nu finde Top-N-poster på alle de vigtige måder:
ORDER BY ... LIMIT ntil enkle lister med de højeste eller laveste værdier- Tilføj en unik tie-breaker for stabile resultater
ROW_NUMBER()ellerDISTINCT ONtil Top-N pr. gruppeFETCH ... WITH TIESfor at beholde lige placerede rækker
Det afslutter sortering, begrænsning og Top-N. Du kan nu skabe reel orden i ethvert resultatsæt.
SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;Lær SQL 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
- 46
- Lektioner
- 183
Ofte stillede spørgsmål
Er lektionen “Find de øverste N poster” gratis?
Ja — hele teksten til “Find de øverste N poster” 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 SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Find de øverste N poster”?
Find de højeste og laveste værdier. Du øver dig i SQL Academy 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å SQL Academy?
Der kræves ingen tidligere erfaring. SQL Academy 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 “Find de øverste N poster”?
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 SQL Academy-lektion?
Ja. Alle SQL Academy-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 med ORDER BY
- Sortering efter flere kolonner
- LIMIT og OFFSET
- Find de øverste N poster