OVER, PARTITION BY, ORDER BY
Forstå modellen for vinduesfunktioner: OVER, PARTITION BY (gruppering), ORDER BY (sortering), og hvordan den adskiller sig fra GROUP BY.
OVER, PARTITION BY, ORDER BY er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 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 vinduesfunktion?
En vinduesfunktion beregner en værdi på tværs af et sæt rækker, der er relateret til den aktuelle række — uden at samle resultatet til færre rækker, som GROUP BY gør. Du beholder alle rækker OG får en aggregatkolonne.
Grundlæggende eksempel
Gennemsnittet af ordrebeløbet for hele tabellen på hver række:
SELECT id, total,
AVG(total) OVER () AS avg_total
FROM orders;OVER-klausulen
Klausulen OVER (...) definerer vinduet. Tomme parenteser betyder hele resultatsættet.
SELECT id, total,
SUM(total) OVER () AS grand_total
FROM orders;PARTITION BY: Gruppér vinduet
Som GROUP BY, men rækkerne samles ikke:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id) AS user_total
FROM orders;
-- Every order keeps its row; user_total is the same for all of one user's orders.ORDER BY i vinduet
ORDER BY inde i OVER definerer rækkefølgen for løbende beregninger:
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id ORDER BY created_at) AS running_total
FROM orders;
-- Running total per user, ordered by date.Vindue vs GROUP BY
Side om side:
-- GROUP BY: 1 row per user
SELECT user_id, SUM(total) FROM orders GROUP BY user_id;
-- Window: 1 row per order, with user total alongside
SELECT id, user_id, total,
SUM(total) OVER (PARTITION BY user_id)
FROM orders;En forskellig ramme for hver række
Rammen er det sæt rækker i partitionen, som funktionen ser på. Standardrammen med ORDER BY er fra begyndelsen til den aktuelle række — det er det, der giver dig løbende totaler.
Navngivne vinduer
Hvis flere funktioner deler et vindue, kan du navngive det én gang:
SELECT id, user_id, total,
SUM(total) OVER w AS running_sum,
AVG(total) OVER w AS running_avg
FROM orders
WINDOW w AS (PARTITION BY user_id ORDER BY created_at);De fleste aggregater fungerer som vinduesfunktioner
COUNT, SUM, AVG, MIN, MAX — alle kan bruges over et vindue. Specialiserede vinduesfunktioner tilføjer ROW_NUMBER, RANK, LAG/LEAD, NTILE osv.
Vinduesfunktioner køres efter WHERE
Logisk rækkefølge: FROM → WHERE → GROUP BY → HAVING → window functions → SELECT → ORDER BY → LIMIT. WHERE filtrerer altså, før vinduerne beregnes.
Ydeevneovervejelser
Vinduesfunktioner kræver sortering eller en hash. For store partitioner kan et indeks på kolonnerne for partitionering og sortering undgå sorteringstrinnet.
Opsummering
Vinduesfunktioner tilføjer aggregatværdier pr. række.
- OVER () = hele resultatet
- PARTITION BY = gruppér vinduet
- ORDER BY i vinduet = aktivér løbende beregninger
Hurtigt tjek
Hvad beregner SUM(x) OVER (PARTITION BY user_id)?
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 “OVER, PARTITION BY, ORDER BY” gratis?
Ja — hele teksten til “OVER, PARTITION BY, ORDER BY” 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 “OVER, PARTITION BY, ORDER BY”?
Forstå modellen for vinduesfunktioner: OVER, PARTITION BY (gruppering), ORDER BY (sortering), og hvordan den adskiller sig fra GROUP BY. 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 1 af 4.
Hvor lang tid tager lektionen “OVER, PARTITION BY, ORDER BY”?
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
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD og tidsseriemønstre
- Løbende totaler og glidende gennemsnit