Aufgabe 01 - Wiederholung Queries mit Northwind
Aufgabe 01 - Wiederholung Queries mit Northwind
Abschnitt betitelt „Aufgabe 01 - Wiederholung Queries mit Northwind“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung wird die aus der 3. Klasse bekannte SQL-Basis an der Northwind-Datenbank aufgefrischt: Joins über mehrere Tabellen, Aggregation mit GROUP BY und HAVING sowie Subqueries (siehe Kapitel 1 - Komplexe Abfragen). Im Expertenteil wird der Bestseller je Kategorie ganz ohne Fensterfunktionen ermittelt.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Ein lauffähiges PostgreSQL-Docker-Setup (aus der 3. Klasse) mit pgAdmin.
- Die Datei
northwind.sql. - Wiederholung: Joins, Aggregation, Subqueries (Kapitel der 3. Klasse).
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie importieren eine bestehende Datenbank in einen laufenden Container.
- Sie verknüpfen mehrere Tabellen und aggregieren mit
GROUP BY/HAVING. - Sie setzen
NOT EXISTSund korrelierte Subqueries ein. - Sie lösen ein „Bestes je Gruppe”-Problem ohne Fensterfunktionen und definieren Brutto- und Netto-Umsatz.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: die Datenbank importieren und einfache Joins anwenden (Teil A).
- Reorganisation und Transfer: aggregieren und filtern (Teil B).
- Reflexion, Problemlösung und Urteilsbildung: Subqueries und ein Bestseller-Problem lösen und begründen (Teile C und D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
docker exec -i postgres psql -U pgadmin -c "CREATE DATABASE northwind;"docker cp ~/rdbms/northwind/northwind.sql postgres:/tmp/northwind.sqldocker exec -i postgres psql -U pgadmin -d northwind -f /tmp/northwind.sqlDie Tabellenliste mit \c northwind und \dt prüfen. Häufige Tabellen: customers, orders, order_details, products, categories, suppliers, employees, shippers. In zwei Sätzen erklären, was die drei Befehle tun.
Netto-Zeilenwert durchgehend: unit_price * quantity * (1 - discount).
Teil A - Joins
Abschnitt betitelt „Teil A - Joins“- INNER JOIN: die letzten 10 Bestellungen mit
order_id,order_date, Firmenname des Kunden und Name des betreuenden Mitarbeiters, nachorder_dateabsteigend. - Mehrfach-JOIN: für
order_id = 10248die Positionen mitproduct_name,unit_price,quantity,discountund dem Zeilenwertline_total.
Teil B - Aggregation
Abschnitt betitelt „Teil B - Aggregation“- GROUP BY: Gesamtumsatz je Produktkategorie (
category_name,revenue_sum), absteigend. - HAVING: dieselbe Auswertung, aber nur Kategorien mit
revenue_sum > 100000. Begründen, warum die Bedingung inHAVINGund nicht inWHEREgehört.
Teil C - Subqueries
Abschnitt betitelt „Teil C - Subqueries“- NOT EXISTS: alle Produkte, die nie in
order_detailsvorkommen (product_id,product_name,supplier_id). - Korreliert: je Kunde das Datum der ersten Bestellung mit einer korrelierten Subquery (
order_date = (SELECT MIN(...) ...)). Zusätzlich den Begriff korrelierte Subquery in zwei Sätzen erklären.
Teil D - Expertenteil: Bestseller je Kategorie und Brutto/Netto
Abschnitt betitelt „Teil D - Expertenteil: Bestseller je Kategorie und Brutto/Netto“- Top-5-Kunden 1997: die fünf umsatzstärksten Kunden im Jahr 1997 (
company_name,revenue_1997) mitGROUP BYundHAVING. Die Wahl der Jahresfilter-Methode (EXTRACT(YEAR ...)oder Datumsbereich) begründen. - Bestseller je Kategorie ohne Fensterfunktionen: je Kategorie das umsatzstärkste Produkt. Mit einer Subquery (oder CTE) je Kategorie den Maximalumsatz bestimmen und dann die Produkte auswählen, deren Umsatz diesem Maximum entspricht (
category_name,product_name,product_revenue). Beschreiben, was bei einem Gleichstand (zwei Produkte mit demselben Maximum) passiert. - NOT EXISTS vs. LEFT JOIN: die Abfrage aus Teil C.1 zusätzlich als
LEFT JOIN ... WHERE ... IS NULLschreiben und in drei bis vier Sätzen Lesbarkeit und Verhalten der beiden Varianten vergleichen. - Brutto vs. Netto: definieren, wie sich
discountauf Analysen auswirkt, und je eine Kennzahl für Brutto- und Netto-Umsatz angeben.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was tun die drei Setup-Befehle beim Import?
- Warum gehört eine Bedingung auf ein Aggregat in
HAVING? - Worin unterscheidet sich eine korrelierte von einer nicht korrelierten Subquery?
- Wie ermittelt man das Beste je Gruppe ohne Fensterfunktionen?
- Worin unterscheiden sich Brutto- und Netto-Umsatz in Northwind?
- Eine SQL-Datei mit allen Abfragen und kurzen Erläuterungen zu den Ergebnissen und Begründungen aus Teil D.
HTL Villach, 2025-2026,
https://www.htl-villach.at