Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Fensterfunktionen in SQL erklärt

Nach dieser Lektion: Ich kann neben jede Zeile eine laufende Summe oder einen Rang setzen, ohne Zeilen zu verlieren.

Lektion, 50 Min.Keine Befehle

Was ist eine Fensterfunktion?

Eine Fensterfunktion berechnet einen Wert über mehrere Zeilen und lässt dabei jede Zeile stehen. So steht neben jedem Tag die laufende Summe oder der Rang.

Das ist der Unterschied zu einer Gruppierung, die Zeilen zusammenfasst. Für Berichte mit Verlauf und Rangliste brauchen Sie genau das.

Am Ende dieser Lektion

Notiz

Ich kann neben jede Zeile eine laufende Summe oder einen Rang setzen, ohne Zeilen zu verlieren.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Fensterfunktionrechnet über mehrere Zeilen und behält jede Zeile
OVERsagt, dass eine Funktion als Fensterfunktion arbeitetsum(x) over ()
Laufende Summedie Summe aller Werte bis zur aktuellen Zeile
Rangder Platz einer Zeile in einer Reihenfolgerank()
Fensterdie Zeilen, die eine Funktion für eine Zeile ansieht

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Group by fasst zusammen, over behält die Zeilen

group by macht aus vielen Zeilen eine. Danach ist der einzelne Tag nicht mehr zu sehen.

Eine Fensterfunktion schreibt das Ergebnis dagegen neben jede Zeile. Das Wort over mit einer Klammer macht eine Aggregatfunktion zur Fensterfunktion.

Bleibt die Klammer leer, sieht jede Zeile alle Zeilen.

Die Summe neben jeder Zeile

tagfahrtensum(fahrten) over ()
2026-05-0442355
2026-05-0535355
2026-05-0651355
Weitere vier Tage...355

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Probieren Sie es: die Summe neben jeder Zeile

Code: duckdb
-- Neben jedem Tag steht die Summe aller Tage.
select tag, fahrten, sum(fahrten) over () as gesamt
from ausleihen
order by tag;
-- Ersetzen Sie sum durch max und lesen Sie die neue Spalte.

Order by im Fenster macht die Summe laufend

Schreiben Sie order by tag in die Klammer von over. Dann sieht jede Zeile nur noch die Zeilen bis zu sich selbst, in der Reihenfolge der Tage.

So wächst die laufende Summe von Tag zu Tag. Am letzten Tag ist sie so groß wie die Gesamtsumme.

Eine laufende Summe zeigt den Verlauf, etwa die Fahrten seit Wochenbeginn.

Wie die laufende Summe entsteht

tagfahrtenlaufende_summeRechnung
2026-05-04424242
2026-05-05357742 + 35
2026-05-065112842 + 35 + 51
2026-05-0728156128 + 28

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Probieren Sie es: die laufende Summe

Code: duckdb
-- Die Summe wächst von Tag zu Tag.
select tag, fahrten,
       sum(fahrten) over (order by tag) as laufende_summe
from ausleihen
order by tag;
-- Nennen Sie die Spalte um und nutzen Sie count(*) statt sum(fahrten).

Ein häufiger Fehler

Warnung

Viele glauben, order by in der Klammer von over sortiere das Ergebnis. Es legt nur fest, in welcher Reihenfolge das Fenster rechnet. Für eine sortierte Ausgabe schreiben Sie am Ende der Abfrage ein eigenes order by.

Rank() setzt jede Zeile auf einen Platz

Die Funktion rank() gibt jeder Zeile einen Platz. Wonach, sagt order by in der Klammer.

Mit order by fahrten desc bekommt der Tag mit den meisten Fahrten den Rang 1. Haben zwei Tage gleich viele Fahrten, teilen sie sich den Rang.

Den Rang gibt es neben jeder Zeile, ohne dass ein Tag verschwindet.

Probieren Sie es: der Rang der Tage

Code: duckdb
-- Rang 1 hat die meisten Fahrten.
select tag, fahrten,
       rank() over (order by fahrten desc) as rang
from ausleihen
order by tag;
-- Ändern Sie desc in asc: Wer steht jetzt auf Rang 1?

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.