Menu
Coddy logo textTech

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 > col2

Le 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 category

Cela 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) > 40

Cela 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) > 40

Cela 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.

challenge icon

Défi

Moyen

Tables 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) > 40

Pour combiner les deux clauses :

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

WHERE 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

quiz iconTestez-vous

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