modul:m290_guko:learningunits:lu10:theorie:a_einfuehrung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m290_guko:learningunits:lu10:theorie:a_einfuehrung [2025/11/05 22:50] gkochmodul:m290_guko:learningunits:lu10:theorie:a_einfuehrung [2025/11/06 00:18] (aktuell) gkoch
Zeile 24: Zeile 24:
 === Wozu braucht man das? === === Wozu braucht man das? ===
  
-  * **Datenanalyse & Reporting** (z.B. Lageberichte für Polizei/Medien) +  * **Datenanalyse & Reporting** – Beispiel (Einbrüche ZH): Wie viele Fälle gab es pro Jahr? 
-  * **Business Intelligence** (TrendsHotspots je Gemeinde/Jahr+    * **Nutzen:** Klare Jahreskurven für **Berichte**, **Dashboards** und **Kurzstatements** (z. B. für Polizei/Medien). 
-  * **Produkt-/WebIntegration** (APIs liefern Rohdaten → Aggregation im Backend/SQL spart App‑Logik+  * **Business Intelligence (BI)** – Beispiel (Einbrüche ZH): Welche Gemeinden haben im Schnitt höhere Raten? 
-  * **Entscheidungsgrundlagen** (Ressourcen planen, Präventionsmassnahmen priorisieren)+    * **Nutzen:** **Prioritäten** setzen (PräventionskampagnenRessourceneinsatz, Fokus-Orte). 
 +  * **Produkt-/Web-Integration** – //APIs liefern Rohdaten, Apps brauchen Kennzahlen// Beispiel (YouTube Top 100): Gesamt-Views je Channel → SUM(view_count) pro Channel; durchschnittliche Videolänge → AVG(duration) pro Channel. 
 +    * **Nutzen:** Das **Backend** liefert fertige Kennzahlen; die **Frontend-Logik** bleibt schlank und schnell.
  
  
Zeile 71: Zeile 73:
 ===== 2. GROUP BY – Daten zu Gruppen zusammenfassen ===== ===== 2. GROUP BY – Daten zu Gruppen zusammenfassen =====
  
-{{ :modul:m290_guko:learningunits:lu10:theorie:group_by-sum.webp |}}+{{ :modul:m290_guko:learningunits:lu10:theorie:group_by-sum.webp?900 |}}
  
 <WRAP round 80% box center> <WRAP round 80% box center>
Zeile 111: Zeile 113:
 //Ergebnis: In den Jahren 2018, 2019 und 2024 haben über 15000 Einbrüche total stattgefunden.// //Ergebnis: In den Jahren 2018, 2019 und 2024 haben über 15000 Einbrüche total stattgefunden.//
 </WRAP> </WRAP>
-=== Alias in GROUP BY === +
-MySQL: Alias kann verwendet werden. Für Portabilität (z.B. andere SQL‑Dialekte): Ausdruck wiederholen.+
  
 ==== 2.1 Beispiele: Gruppieren nach einem Kriterium ==== ==== 2.1 Beispiele: Gruppieren nach einem Kriterium ====
  
 <WRAP round 80% box center> <WRAP round 80% box center>
-**a) Total Einbrüche pro Jahr** <code sql>+**Total Einbrüche pro Jahr** <code sql>
 SELECT ausgangsjahr, SELECT ausgangsjahr,
 SUM(straftaten_total) AS total_faelle SUM(straftaten_total) AS total_faelle
Zeile 125: Zeile 126:
 **Ergebnis (Auszug)** **Ergebnis (Auszug)**
 ^ ausgangsjahr ^ total_faelle ^ ^ ausgangsjahr ^ total_faelle ^
-2019 5080 +2009 29972 
-2020 4525 +2010 26770 
-2021 4789 |+2011 24394 | 
 +... etc.
 </WRAP> </WRAP>
  
-<WRAP round 80% box center> 
-**b) Anzahl erfasste Gemeinden pro Jahr** 
-<code sql> 
-SELECT ausgangsjahr, 
-COUNT(DISTINCT gemeindename) AS anzahl_gemeinden 
-FROM zh_einbrueche.einbrueche 
-GROUP BY ausgangsjahr 
-ORDER BY ausgangsjahr; </code> 
-**Ergebnis (Auszug)** 
-^ ausgangsjahr ^ anzahl_gemeinden ^ 
-| 2019 | 171 | 
-| 2020 | 171 | 
-| 2021 | 171 | 
-</WRAP> 
  
 ==== 2.2 Beispiele: Gruppieren nach mehreren Kriterien ==== ==== 2.2 Beispiele: Gruppieren nach mehreren Kriterien ====
Zeile 157: Zeile 145:
 **Ergebnis (Auszug)** **Ergebnis (Auszug)**
 ^ ausgangsjahr ^ tatbestand ^ total_faelle ^ ^ ausgangsjahr ^ tatbestand ^ total_faelle ^
-2020 Einbruch 3100 +2023 Einschleichdiebstahl 1961 
-2020 Einschleichen 1425 +2024 Einbruchdiebstahl 5956 
-2021 Einbruch 3250 |+2024 Einbrüche insgesamt 7998 | 
 +... etc.
 </WRAP> </WRAP>
  
  
-===== 3. HAVING – Gruppen gezielt filtern =====+===== 3. HAVING – Gruppen filtern =====
  
 WHERE kann **keine** Aggregatfunktionen enthalten. Wenn Sie **Ergebnisgruppen** (nach GROUP BY) filtern wollen, verwenden Sie **HAVING**. WHERE kann **keine** Aggregatfunktionen enthalten. Wenn Sie **Ergebnisgruppen** (nach GROUP BY) filtern wollen, verwenden Sie **HAVING**.
  
 <WRAP round 80% box center> <WRAP round 80% box center>
-**Jahre mit über 5'000 Fällen insgesamt** <code sql>+**Jahre mit über 25'000 Fällen insgesamt** <code sql>
 SELECT ausgangsjahr, SELECT ausgangsjahr,
 SUM(straftaten_total) AS total_faelle SUM(straftaten_total) AS total_faelle
 FROM zh_einbrueche.einbrueche FROM zh_einbrueche.einbrueche
 GROUP BY ausgangsjahr GROUP BY ausgangsjahr
-HAVING SUM(straftaten_total) > 5000+HAVING SUM(straftaten_total) > 25000
 ORDER BY total_faelle DESC; </code> ORDER BY total_faelle DESC; </code>
 **Ergebnis (Auszug)** **Ergebnis (Auszug)**
 ^ ausgangsjahr ^ total_faelle ^ ^ ausgangsjahr ^ total_faelle ^
-2013 6240 +2009 29972 
-| 2012 | 6115 +| 2012 | 28730 
-</WRAP> +| 2010 | 26770 |
- +
-<WRAP round 80% box center> +
-**Abarbeitungsreihenfolge (vereinfacht)** +
-FROM → WHERE → GROUP BY → **Aggregatfunktionen** → HAVING → SELECT → ORDER BY.+
 </WRAP> </WRAP>
  
-===== 4. Häufige Stolpersteine (und wie man sie vermeidet) ===== 
  
-* SELECT enthält **ungegruppte Spalten** → Fehlermeldung oder Zufallswerte. 
-  → Nur Spalten in GROUP BY **oder** in Aggregaten verwenden. 
-* **Division durch 0** bei Anteilen/Quoten. 
-  → NULLIF(denominator,0) verwenden. 
-* **MySQL‑Spezialität**: Alias in GROUP BY ist erlaubt, aber **nicht portabel**. 
-  → Ausdruck wiederholen, wenn Portabilität wichtig ist. 
-* **NULLs**: COUNT(spalte) ignoriert NULL → **bewusste Spaltenwahl!** 
  
  • modul/m290_guko/learningunits/lu10/theorie/a_einfuehrung.1762379428.txt.gz
  • Zuletzt geändert: 2025/11/05 22:50
  • von gkoch