Datensatz: Anzahl Einbrüche nach Gemeinden und Stadtkreisen des Kantons Zürich
Um die Code-Beispiele nachvollziehen zu können, brauchen Sie die Datenbank zh_einbrueche, die Sie hier als .zip-File downloaden können: Zip-File mit Datenbank (sql-File) zu Einbrüchen im Kanton Zürich.
1)
Aggregatfunktionen berechnen einen zusammengefassten Wert über mehrere Zeilen (Records). Typische Aufgaben:
| Funktion | Zweck | NULLs |
|---|---|---|
COUNT(*) | Zeilen zählen | zählt alle Zeilen |
COUNT(spalte) | Nicht‑NULL‑Werte zählen | ignoriert NULL |
SUM(spalte) | Summe | ignoriert NULL |
AVG(spalte) | Durchschnitt | ignoriert NULL |
MIN(spalte) | Minimum | ignoriert NULL |
MAX(spalte) | Maximum | ignoriert NULL |
Syntax
SELECT AGGREGATFUNKTION(ausdruck) AS alias FROM zh_einbrueche.einbrueche;
SELECT COUNT(DISTINCT gemeindename) AS anzahl_gemeinden FROM zh_einbrueche.einbrueche;
Ergebnis (Auszug)
| anzahl_gemeinden |
|---|
| 161 |
SELECT MAX(straftaten_total) AS max_faelle_in_einer_zeile FROM zh_einbrueche.einbrueche;
Ergebnis (Auszug)
| max_faelle_in_einer_zeile |
|---|
| 1060 |
Warum ist GROUP BY wichtig? Ohne GROUP BY erhalten Sie einen Aggregatwert über alle Zeilen. Mit GROUP BY erhalten Sie je Gruppe eine Zeile (z.B. pro Jahr, pro Gemeinde oder pro Kombination aus Jahr+Gemeinde). Man kann so nach einzelnen Einträgen gruppieren.
Nur Aggregatfunktionen (z.B. SUM(…), AVG(…)) oder Spalten, die im GROUP BY aufgeführt sind.
Gültig:
SELECT ausgangsjahr, SUM(straftaten_total) FROM zh_einbrueche.einbrueche GROUP BY ausgangsjahr;
Ungültig (fehlendes GROUP BY für gemeindename):
SELECT gemeindename, SUM(straftaten_total) FROM zh_einbrueche.einbrueche; -- führt zu Fehler/Zufallswerten
Beispiel: Nur Jahre ab 2018 berücksichtigen (WHERE), und nur Gruppen mit Total > 1'000 zeigen (HAVING)
SELECT ausgangsjahr, SUM(straftaten_total) AS total_faelle FROM zh_einbrueche.einbrueche WHERE ausgangsjahr >= 2018 -- Zeilenfilter GROUP BY ausgangsjahr HAVING SUM(straftaten_total) > 15000; -- Gruppenfilter
Ergebnis: In den Jahren 2018, 2019 und 2024 haben über 15000 Einbrüche total stattgefunden.
Total Einbrüche pro Jahr
SELECT ausgangsjahr, SUM(straftaten_total) AS total_faelle FROM zh_einbrueche.einbrueche GROUP BY ausgangsjahr ORDER BY ausgangsjahr;
Ergebnis (Auszug)
| ausgangsjahr | total_faelle |
|---|---|
| 2009 | 29972 |
| 2010 | 26770 |
| 2011 | 24394 |
… etc.
Total pro Jahr und Tatbestand (z.B. Einbruch, Einschleichen)
SELECT ausgangsjahr, tatbestand, SUM(straftaten_total) AS total_faelle FROM zh_einbrueche.einbrueche GROUP BY ausgangsjahr, tatbestand ORDER BY ausgangsjahr, tatbestand;
Ergebnis (Auszug)
| ausgangsjahr | tatbestand | total_faelle |
|---|---|---|
| 2023 | Einschleichdiebstahl | 1961 |
| 2024 | Einbruchdiebstahl | 5956 |
| 2024 | Einbrüche insgesamt | 7998 |
… etc.
WHERE kann keine Aggregatfunktionen enthalten. Wenn Sie Ergebnisgruppen (nach GROUP BY) filtern wollen, verwenden Sie HAVING.
Jahre mit über 25'000 Fällen insgesamt
SELECT ausgangsjahr, SUM(straftaten_total) AS total_faelle FROM zh_einbrueche.einbrueche GROUP BY ausgangsjahr HAVING SUM(straftaten_total) > 25000 ORDER BY total_faelle DESC;
Ergebnis (Auszug)
| ausgangsjahr | total_faelle |
|---|---|
| 2009 | 29972 |
| 2012 | 28730 |
| 2010 | 26770 |