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 > col2Die 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 categoryDas 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) > 40Dies 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) > 40Dies 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.
Aufgabe
MittelVerfü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) > 40Um beide Klauseln zu kombinieren:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40WHERE filtert zuerst die Datensätze, dann gruppiert GROUP BY die verbleibenden Daten, und schließlich filtert HAVING die gruppierten Ergebnisse.
Probier es selbst
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns