Menu
Coddy logo textTech

Grouping Part 2

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

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

SELECT * FROM table1
WHERE col1 > col2

Die col1 > col2 wird auf jedem Datensatz ausgeführt und prüft, ob sie erfüllt ist.

Aber was, wenn wir aggregierte Ergebnisse filtern wollen? 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 HAVING-Schlüsselwort. Es filtert Daten nach der Aggregatbedingung.

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

Dies filtert alle Kategorien, deren durchschnittlicher Preis 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

Dies wird zuerst Datensatz für Datensatz vorgehen und alle Datensätze filtern, bei denen der Preis größer als 25 ist, und erst danach die GROUP BY-Klausel ausführen und jede Kategorie filtern, bei der der durchschnittliche Preis größer als 40 ist.

challenge icon

Aufgabe

Mittel

Verfügbare Tabellen und Spalten:

  • <strong>earthquakes</strong>: <strong>location</strong>, <strong>amplitude</strong>, <strong>period</strong>

Die Richterskala ist eine logarithmische Skala, die verwendet wird, um die Magnitude von Erdbeben zu messen.

Wir müssen den durchschnittlichen Wert der Magnitude für jeden Ort aller großen Erdbeben zurückgeben

Ein großes 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)<sup>2</sup> / T, die äquivalent zu M = ((A/T)*(A/T)) / T ist.

Geben Sie den Ort und den durchschnittlichen Wert der Magnitude für jeden Ort zurück, wobei nur die großen Erdbeben einbezogen werden (benennen Sie die Spalte avg_magnitude). Schließen Sie in Ihr Ergebnis nur die Orte ein, bei denen die avg_magnitude größer als 1 ist

Runden Sie die Ergebnisse auf 2 Dezimalstellen

Spickzettel

Das WHERE-Schlüsselwort filtert einzelne Datensätze, während HAVING aggregierte Ergebnisse nach der Gruppierung filtert:

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

Um beide Klauseln zu kombinieren:

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

WHERE filtert zuerst die Datensätze, dann gruppiert GROUP BY die verbleibenden Daten, und schließlich filtert HAVING die gruppierten Ergebnisse.

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