Menu
CoddyTech

Gruppierung Teil 2

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy. Lektion 37 von 72.

Das Schlüsselwort WHERE führt eine Bedingung für jeden Datensatz einzeln aus. Zum Beispiel:

SELECT * FROM table1
WHERE col1 > col2

col1 > col2 wird für jeden Datensatz ausgeführt und prüft, ob die Bedingung erfüllt ist.

Aber was ist, wenn wir aggregierte Ergebnisse filtern möchten? Zum Beispiel:

SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY category

Das wird nicht funktionieren, weil WHERE keine Aggregationen überprüfen kann. Dafür haben wir das Schlüsselwort HAVING. Es filtert Daten nach der Aggregatbedingung.

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Dadurch werden alle Kategorien herausgefiltert, deren Durchschnittspreis größer als 40 ist.

Wenn wir die HAVING- und WHERE-Klausel kombinieren möchten, schreiben wir:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

Zuerst wird Datensatz für Datensatz vorgegangen und alle Datensätze gefiltert, bei denen der Preis größer als 25 ist, und erst danach wird die GROUP BY-Klausel ausgeführt und jede Kategorie gefiltert, deren Durchschnittspreis größer als 40 ist.

challenge icon

Aufgabe

Mittel

Verfügbare Tabellen und Spalten:

  • earthquakes: location, amplitude, period

Die Richterskala ist eine logarithmische Skala, die zur Messung der Magnitude von Erdbeben verwendet wird.

Wir müssen für jeden Ort die durchschnittliche Magnitude aller schweren Erdbeben zurückgeben.

Ein schweres Erdbeben ist definiert als:

  • Die Amplitude ist größer oder gleich 1.
  • Die Periode der Wellen ist größer oder gleich 1 Minute.

Für diese Herausforderung verwenden wir eine andere Formel: M = (A/T)^2 / T, die äquivalent zu M = ((A/T)*(A/T)) / T ist. Hier ist M die Magnitude, A die Spalte amplitude und T die Spalte period.

Gib den Ort und die durchschnittliche Magnitude jedes Ortes zurück und berücksichtige dabei nur die schweren Erdbeben (benenne die Spalte avg_magnitude). Nimm in dein Ergebnis nur die Orte auf, bei denen avg_magnitude größer als 1 ist.

Runde die Ergebnisse auf 2 Dezimalstellen.

Probier es selbst

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: SQL-Playground