====== LU10a: Aggregatfunktionen Einführung ====== ===== 0. Datensätze ===== Wir arbeiten mit **realen Daten** aus unterschiedlichen Bereichen. Das macht die Übungen **praxisnah**: Wir beantworten echte Fragen, erkennen **Trends** und leiten **Kennzahlen** ab. Die drei Datensätze sind aus unterschiedlichen Sparten: * **Einbrüche** (Kanton Zürich) – Datenbank: ''zh_einbrueche'', Tabelle: ''einbrueche'' * **Raumfahrt (1957–2022)** – Datenbank: ''spacemission'', Tabelle: ''missions'' * **Musiktrends (YouTube Top Songs 2025)** – Datenbank: ''youtube_top_100_songs_2025'', Tabelle: ''youtube_top_100_songs_2025'' === Einbrüche (Kanton Zürich) === {{:modul:m290_guko:learningunits:lu10:theorie:noun-robbery-6965605.svg?100&nolink|Robbery-Icon – Gofficon (Noun Project)}} ((Bildquelle: ''Robbery'' von Gofficon, [[https://thenounproject.com/browse/icons/term/robbery/|Noun Project]] – Lizenz: CC BY 3.0)) * **Zeitraum:** 2009–2024 * **Quelle:** Kantonspolizei ZH * **Lizenz:** CC0 * **Granularität:** je **Gemeinde** (Stadt Zürich zusätzlich je **Stadtkreis**) **Was steckt drin? (Auszug Felder)** ^ Feld ^ Bedeutung ^ | ''ausgangsjahr'' | Berichtsjahr | | ''gemeindename'' / ''stadtkreis_name'' | örtliche Zuordnung | | ''straftaten_total'' | Vollendet **+** Versucht | | ''straftaten_vollendet'', ''straftaten_versucht'' | Aufschlüsselung | | ''einwohner'' | Bevölkerungszahl (Ende Vorjahr) | | ''haeufigkeitszahl'' | Fälle **pro 1’000 Einwohner** | **Beispielfragen:** * Wie viele Einbrüche gab es **letztes Jahr** in **meiner Gemeinde**? * Welche Gemeinden haben im **Durchschnitt** die **höchsten Raten**? === Space Missions === {{:modul:m290_guko:learningunits:lu10:theorie:noun-space-7278594.svg?100&nolink|Space-Icon – Zahirulizul (Noun Project)}} ((Bildquelle: ''Space'' von Zahirulizul, [[https://thenounproject.com/browse/icons/term/space/|Noun Project]] – Lizenz: CC BY 3.0)) * **Zeitraum:** 1957–2022 * **Quelle:** Scrape von nextspaceflight.com * **Granularität:** **Start-Ereignis** (Mission) **Was steckt drin? (Auszug Felder)** ^ Feld ^ Bedeutung ^ | ''company'' | Betreiber/Organisation (staatlich, militärisch, privat) | | ''location'' | Startplatz (Kosmodrom, Spaceport, Pad) | | ''launch_date'' | Datum/Zeit des Starts | | ''rocket'' / ''status_rocket'' | Träger & Status (aktiv/retired) | | ''mission_status'' | Erfolg/Fehlschlag u. a. | | ''price_usd'' | Missionskosten (falls vorhanden; Mio. USD) | **Beispielfragen:** * Wie viele Starts hat **SpaceX** im Vergleich zu **staatlichen Akteuren** bis **2022**? * Welche **Jahre** waren **startstark**, welche **pannenanfällig**? * Welche **aktiven Raketen** haben die **meisten erfolgreichen** Starts? === YouTube Top 100 (2025) === {{:modul:m290_guko:learningunits:lu10:theorie:noun-song-8043534.svg?100&nolink|Song-Icon – Puspa Kusuma (Noun Project)}} ((Bildquelle: ''Song'' von Puspa Kusuma, [[https://thenounproject.com/browse/icons/term/song/|Noun Project]] – Lizenz: CC BY 3.0)) * **Stichtag:** 22.09.2025 * **Umfang:** 100 Songs * **Granularität:** **Video/Track** inkl. Kanal-Metadaten **Was steckt drin? (Auszug Felder)** ^ Feld ^ Bedeutung ^ | ''title'' / ''full_title'' | Videotitel (offiziell) | | ''channel'' | Künstler:in/Kanal | | ''view_count'' | Views (bis > 2 Mrd.) | | ''duration'' | Videolänge (ca. 2–6 Minuten) | | ''tags'' / ''description'' | Metadaten (Genre, Labels, Promo) | | ''category'' | Kategorie (meist **Music**) | **Beispielfragen:** * Welche sind die **meistgespielten Songs 2025** und welche **Channels** sind **besonders erfolgreich**? * Gibt es einen **Zusammenhang** zwischen **Songdauer** und **Anzahl Views**? ==== Setup (Download & Import) ==== Laden Sie die vorbereiteten Datensätze herunter und importieren Sie sie: {{ :modul:m290_guko:learningunits:lu10:theorie:datensaetze_lu10_spacemissions_einbrueche_youtube_top_100.zip | ZIP mit allen drei SQL-Dumps }} {{ :modul:m290_guko:learningunits:lu10:theorie:load_and_import_sql_files_aggregate.mp4?1040x585 | Screencast, der zeigt wie die SQL-Files in Webstorm ausgeführt werden. Drei Datenbanken mit Tabellen und Datensätzen werden in MySQL erstellt. }} //Screencast, der zeigt wie die SQL-Files in Webstorm ausgeführt werden. Drei Datenbanken mit Tabellen und Datensätzen werden in MySQL erstellt.// **Schema wählen (wichtig):** Entweder im Editor-Dropdown das Schema wählen **oder** mit ''USE'' explizit setzen: -- Beispiele: USE spacemission; -- USE zh_einbrueche; -- USE youtube_top_100_songs_2025; ===== 1. Was sind Aggregatfunktionen – und warum braucht man sie? ===== Aggregatfunktionen fassen **viele Zeilen** zu **Kennzahlen** zusammen (z. B. Anzahl, Summe, Durchschnitt, Minimum/Maximum). Sie sind die Grundlage für **Berichte, Dashboards, BI-Auswertungen((Business Intelligence: systematische, kennzahlenbasierte Datenanalyse zur Entscheidungsunterstützung; typische Artefakte sind Reports, Dashboards, Zeitreihen und Rankings.)) und Web-Backends**((Serverseitige Logik/Services einer Web-App; liest Datenquellen, validiert, rechnet und stellt Ergebnisse über APIs (Schnittstellen) bereit.)). ==== 1.1 Die wichtigsten Aggregatfunktionen ==== ^ Funktion ^ Zweck ^ NULL-Verhalten ^ | ''COUNT(*)'' | Anzahl Zeilen | zählt **alle** Zeilen | | ''COUNT(spalte)'' | Anzahl **nicht NULL** | **ignoriert** NULL | | ''SUM(spalte)'' | Summe | ignoriert NULL | | ''AVG(spalte)'' | Durchschnitt | ignoriert NULL | | ''MIN(spalte)'' | Kleinster Wert | ignoriert NULL | | ''MAX(spalte)'' | Grösster Wert | ignoriert NULL | **Syntax (allgemein)** SELECT AGGREGATFUNKTION(ausdruck) AS alias FROM schema.tabelle; ===== 2. Einfache Aggregationen ===== === 2.1 COUNT – Wie viele Datensätze sind es? === **Frage:** Wie viele Missionen befinden sich im Datensatz? SELECT COUNT(*) AS anzahl_missionen FROM missions; **Was passiert?** ''COUNT(*)'' zählt alle Zeilen. \\ {{:modul:m290_guko:learningunits:lu10:theorie:anzahlmissionen.png?300&nolink}} === 2.2 SUM – Summe bilden === **Frage:** Wie viele **Views** haben alle 100 YouTube-Songs zusammen? SELECT SUM(view_count) AS views_total FROM youtube_top_100_songs_2025; **Was passiert?** ''SUM(view_count)'' addiert alle Views über die Tabelle. \\ {{:modul:m290_guko:learningunits:lu10:theorie:total_views.png?300&nolink}} //Ergebnis: 2025 haben die 100 meistgeklickten YouTube-Songs insgesamt über 10 Milliarden Views erzielt.// === 2.3 AVG – Durchschnitt berechnen === **Frage:** Wie lang ist ein Song **im Durchschnitt**? SELECT AVG(duration) AS avg_duration FROM youtube_top_100_songs_2025; **Was passiert?** ''AVG(duration)'' berechnet den Mittelwert; NULLs werden ignoriert. \\ {{:modul:m290_guko:learningunits:lu10:theorie:avg_duration.png?300&nolink}} //Ergebnis: 2025 haben die 100 meistgeklickten YouTube-Songs eine durchschnittliche Song-Dauer von 3 min 24s.// === 2.4 MIN / MAX – Kleinster / Grösster Wert === **Fragen:** Längster Song? Kürzester Song? -- Längster Song SELECT MAX(duration) AS max_duration FROM youtube_top_100_songs_2025; -- Kürzester Song SELECT MIN(duration) AS min_duration FROM youtube_top_100_songs_2025; **Was passiert?** ''MAX(...)'' gibt den grössten, ''MIN(...)'' den kleinsten Wert zurück. \\ {{:modul:m290_guko:learningunits:lu10:theorie:max_duration.png?300&nolink}} {{:modul:m290_guko:learningunits:lu10:theorie:min_duration.png?300&nolink}} //Ergebnis: Der längste Song in der Tabelle ist "Kendrick Lamar - Not Like Us" mit einer Dauer von 5 min 54s und der kürzeste Song "Claudia Valentina - Candy (Official Video)" mit 2 Minuten.//