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

PARTITION BY und gleitender Durchschnitt

Nach dieser Lektion: Ich kann in jeder Gruppe einen Rang vergeben und einen Durchschnitt über ein wanderndes Fenster bilden.

Lektion, 55 Min.Keine Befehle

Wie rechnet man getrennt je Gruppe?

Mit PARTITION BY teilen Sie die Zeilen einer Tabelle in Gruppen und rechnen in jeder Gruppe für sich, zum Beispiel einen Rang je Kurs.

Ein Frame legt dazu fest, welche Nachbarzeilen mitzählen. So bilden Sie einen gleitenden Durchschnitt über die letzten drei Wochen.

Am Ende dieser Lektion

Notiz

Ich kann in jeder Gruppe einen Rang vergeben und einen Durchschnitt über ein wanderndes Fenster bilden.

Schlüsselwörter

BegriffWas er bedeutet
Partitioneine Gruppe von Zeilen, in der eine Fensterfunktion für sich rechnet
Framedie Zeilen um die aktuelle Zeile, die mitzählen
Gleitender Durchschnittder Schnitt der letzten paar Werte, der mitwandert
ROWS BETWEENlegt den Frame nach der Zahl der Zeilen fest
QUALIFYbehält Zeilen nach dem Ergebnis einer Fensterfunktion

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

Partition by gibt jeder Gruppe ihre eigene Rechnung

Ein Rang über alle Studierenden mischt die Kurse. Besser ist ein Rang je Kurs.

partition by kurs in der Klammer von over teilt die Zeilen nach Kurs. Dann zählt jede Partition von vorn: In jedem Kurs gibt es einen Platz 1.

Die Zeilen bleiben erhalten, nur die Rechnung läuft getrennt.

Ein Platz je Kurs

kursstudierendepunkteplatz
DatenbankenClara911
DatenbankenAnna882
StatistikFinn951
StatistikGreta832

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

Probieren Sie es: ein Platz je Kurs

Code: duckdb
-- Der Platz zählt in jedem Kurs von vorn.
select kurs, studierende, punkte,
       rank() over (partition by kurs order by punkte desc) as platz
from pruefungen
order by kurs, platz;
-- Ersetzen Sie rank() durch row_number() und vergleichen Sie.

Qualify behält die ersten Plätze jeder Gruppe

Sie wollen nur die zwei Besten je Kurs. Die Bedingung platz <= 2 gehört aber nicht in where, denn where läuft vor der Fensterfunktion.

In DuckDB gibt es dafür qualify. Diese Klausel läuft nach der Fensterfunktion und filtert Zeilen nach dem Platz.

Sie können auch eine Unterabfrage um die Fensterfunktion setzen und dort mit where filtern.

Probieren Sie es: die zwei Besten je Kurs

Code: duckdb
-- qualify filtert nach der Fensterfunktion.
select kurs, studierende, punkte,
       row_number() over (partition by kurs order by punkte desc) as platz
from pruefungen
qualify platz <= 2
order by kurs, platz;
-- Ändern Sie 2 in 1: Wer ist jeweils die Beste oder der Beste?

Ein häufiger Fehler

Warnung

Viele schreiben where platz <= 2 und wundern sich über den Fehler. Der Platz entsteht erst nach where. Nutzen Sie qualify oder eine Unterabfrage, wenn Sie nach einer Fensterfunktion filtern.

Ein Frame bestimmt, welche Zeilen mitzählen

Eine laufende Summe zählt alle Zeilen bis zur aktuellen. Oft wollen Sie weniger: nur die letzten drei Wochen.

Der Frame sagt das: rows between 2 preceding and current row heißt die aktuelle Zeile und die zwei davor. Mit avg entsteht ein gleitender Durchschnitt.

Am Anfang gibt es weniger als zwei Vorgänger. Dann zählt der Frame nur, was da ist.

Der Frame wandert mit

wochefahrtenZeilen im Framegleitend
1300Woche 1300
2330Woche 1 bis 2315
3360Woche 1 bis 3330
4270Woche 2 bis 4320

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

Probieren Sie es: der gleitende Durchschnitt

Code: duckdb
-- Der Schnitt der aktuellen Woche und der zwei davor.
select station, woche, fahrten,
       avg(fahrten) over (
         partition by station
         order by woche
         rows between 2 preceding and current row
       ) as gleitend
from wochen
order by station, woche;
-- Ändern Sie 2 in 1 und sehen Sie, wie die Kurve unruhiger wird.

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.