AdSQL_Window_01 Flashcards
Auf welche Befehle sind Window Functions limitiert? Und warum?
- Window Functions sind limitiert auf SELECT und ORDER BY.
- Wenn WHERE erlaubt wäre, könnte je nach Reihenfolge der Ausführung unterschiedliche Zeilen eliminiert werden. Dadurch verändert sich das Ergebnis.
Wie kann ich die Anzahl der Tiere anzeigen lassen?
Einfach mit
COUNT(*) OVER () AS number_of_animals
Wie kann ich die Anzahl der Tiere seit 2017 anzeigen lassen?
Indem ich in WHERE einen Filter setze.
Das zeigt die Bedeutung der logischen Bearbeitungsfolge.
Wie kann ich die Anzahl der Tiere, aufgeteilt nach Spezies anzeigen lassen?
COUNT(*) OVER (PARTITION BY species)
Was wird diese Abfrage zurückgeben?
SELECT MIN(admission_date)
FILTER (species) OVER ()
FROM animals;
Einen invaliden Syntax Error.
FILTER (WHERE species = ‘dog’) OVER ()
Wie kann ich die FRAME BOUNDARIES angeben?
ROWS | RANGE | GROUPS
BETWEEN
UNBOUNDED PRECEDING (Anfang der Partition)
1 PRECEDING
1 FOLLOWING
CURRENT ROW
AND
UNBOUNDED FOLLOWING (Ende der Partition)
1 PRECEDING
1 FOLLOWING
CURRENT ROW
Wie kann ich die Bereiche von Frames definieren?
Als ROWS, RANGE oder GROUPS.
Was muss ich bei RANGE FRAMES beachten?
Range Frames sind spezifiziert durch Wertebereiche und daher Datentypabhängig.
Was sind Frames?
Ein Frame ist ein Subset von einer Partition.
Was ist der Default-Wert bei Frames?
range between unbounded preceding and current row
Frames: Was bedeutet UNBOUNDED PRECEDING?
Alle Zeilen vor der aktuellen Zeile werden berücksichtigt.
Frames: Was bedeutet UNBOUNDED FOLLOWING?
Alle Zeilen nach der aktuellen Zeile werden berücksichtigt.
Ein Beispiel, um den Unterschied zwischen GROUP BY und WINDOW Funktionen zu erläutern.
- Mit GROUP BY werden die einzelnen Zeilen in Gruppen eingeteilt, auf die dann nicht mehr zugegriffen werden kann.
- Wenn ich z.B. jeden einzelnen Mitarbeiter auflisten möchte und zusätzlich in einer Spalte das höchste Gehalt aus der Abteilung angeben möchte, muss ich das mit einer Window Funktion machen.
- Select employee_name, department, salary, max(salary) over (Partition by department) as top_salary from employee
Ein Beispiel für die Verwendung von Window Functions?
- Ein interessantes Feature sind positionale Funktionen wie LEAD() und LAG().
- Dadurch kann ich die vorherige oder nachfolgende Werte aus einer anderen Spalte im gleichen WINDOW bekommen.
- Das ist z.B. praktisch, wenn ich die prozentuale Veränderung zum Vortag angeben möchte.
- Wichtig dafür ist die ORDER BY Klausel
Was kommt hier heraus?