Grouping Part 2
Fait partie de la section Les fondamentaux du Journey SQL de Coddy — leçon 37 sur 72.
Le mot-clé WHERE exécute une condition sur chaque enregistrement séparément. Par exemple :
SELECT * FROM table1
WHERE col1 > col2Le col1 > col2 s'exécutera sur chaque enregistrement et vérifiera s'il est satisfait.
Mais et si nous voulions filtrer les résultats agrégés ? Par exemple :
SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY categoryCela ne fonctionnera pas parce que WHERE ne peut pas vérifier les agrégations. Pour cela, nous avons le mot-clé HAVING. Il filtre les données selon la condition d'agrégation.
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40Cela filtrera toutes les catégories dont le prix moyen est supérieur à 40.
Si nous voulons combiner les clauses HAVING et WHERE, nous écrirons :
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40Cela ira d'abord enregistrement par enregistrement et filtrera tous les enregistrements pour lesquels le prix est supérieur à 25, et ce n'est qu'après cela qu'il exécutera la clause GROUP BY et filtrera chaque catégorie pour laquelle le prix moyen est supérieur à 40.
Défi
MoyenTables et colonnes disponibles :
<strong>earthquakes</strong>:<strong>location</strong>,<strong>amplitude</strong>,<strong>period</strong>
L'échelle de Richter est une échelle logarithmique utilisée pour mesurer la magnitude des séismes.
Nous devons retourner la magnitude moyenne pour chaque emplacement de tous les grands séismes
Un grand séisme est défini comme :
- L'amplitude est supérieure ou égale à 1
- La période des ondes est supérieure ou égale à 1 minute
Pour ce défi, nous utiliserons une formule différente : M = (A/T)<sup>2</sup> / T, qui est équivalente à M = ((A/T)*(A/T)) / T.
Retournez l'emplacement et la magnitude moyenne de chaque emplacement en incluant uniquement les grands séismes (nommez la colonne avg_magnitude). Incluez dans votre résultat uniquement les emplacements où le avg_magnitude est supérieur à 1
Arrondissez les résultats à 2 décimales
Aide-mémoire
Le mot-clé WHERE filtre les enregistrements individuels, tandis que HAVING filtre les résultats agrégés après le groupement :
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40Pour combiner les deux clauses :
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40WHERE filtre les enregistrements en premier, puis GROUP BY regroupe les données restantes, et enfin HAVING filtre les résultats groupés.
Essayez vous-même
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les fondamentaux
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