SQL Academy · Lektion

OVER, PARTITION BY, ORDER BY

Forstå modellen for vinduesfunktioner: OVER, PARTITION BY (gruppering), ORDER BY (sortering), og hvordan den adskiller sig fra GROUP BY.

Lektion 1 af 413 trin

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)?

Gratis at komme i gang

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

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD og tidsseriemønstre
  4. Løbende totaler og glidende gennemsnit
← Tilbage til SQL Academy