GROUP BY et HAVING
Pour obtenir des insights plus approfondis et mieux organiser les données au sein d’une base de données, SQL introduit les puissantes GROUP BY
et HAVING
clauses.
Ces outils vous permettent de transformer des données brutes en résumés significatifs en catégorisant des lignes et en appliquant des fonctions d’agrégation, ce qui facilite l’analyse des tendances, l’identification des modèles ou la génération de rapports adaptés à des catégories spécifiques.
REGROUPER PAR
Pour analyser les données par catégorie ou groupe, SQL fournit la GROUP BY
clause. Cette clause classe les lignes en fonction des valeurs des colonnes spécifiées, partitionnant efficacement les données en sous-ensembles.
La véritable puissance de celui-ci GROUP BY
est révélée lorsqu’elle est utilisée avec des fonctions d’agrégation. Les fonctions d’agrégation, telles que COUNT()
, SUM()
, AVG()
etMIN()
MAX()
effectuent des calculs sur ces groupes, ce qui vous permet de générer des statistiques récapitulatives pour chaque catégorie.
Par exemple, vous pouvez utiliser GROUP BY pour calculer : -total ventes SUM()
pour chaque catégorie de produits, -average prix AVG()
des produits de chaque fournisseur, -number des clients COUNT()
de chaque ville.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
Cette requête récupère le prix moyen des produits dans chaque catégorie en regroupant les lignes de la sales.products
table en fonction de leur category_id
. En appliquant la AVG()
fonction à la price
colonne, la requête calcule la valeur moyenne des prix pour tous les produits sous tous les produits distincts category_id
.
GROUP BY
la clause n’a pas toujours besoin d’être associée à des fonctions d’agrégation. Bien qu’il soit couramment utilisé avec les fonctions d’agrégation pour effectuer des calculs sur des données groupées, GROUP BY
il peut également être utilisé par lui-même pour organiser les données en groupes à d’autres fins, telles que la récupération de combinaisons distinctes de colonnes.
SELECT category_id
FROM sales.products
GROUP BY category_id;
Cette requête regroupe les lignes category_id
sans effectuer d’agrégation, répertoriant simplement chaque élément distinct category_id
présent dans la sales.products
table.
AYANT
Dans SQL, la WHERE
clause ne peut pas être utilisée pour filtrer les résultats des fonctions d’agrégation.
Pour filtrer les groupes créés par la GROUP BY
clause en fonction des résultats de la fonction d’agrégation, vous utilisez la HAVING
clause.
Considérez comme HAVING
une WHERE
clause pour les groupes : elle vous permet d’appliquer des conditions aux données résumées produites par les fonctions d’agrégation, ce qui vous permet d’affiner votre analyse pour vous concentrer sur les groupes pertinents.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
Cette requête calcule la moyenne price
des produits dans chaque catégorie en regroupant les lignes de la sales.products
table en fonction de leur category_id
. Il filtre ensuite les résultats pour inclure uniquement les catégories où la moyenne price
dépasse 30 à l’aide de la HAVING
clause.