1. Qu’est‑ce que la clause HAVING ?
La clause HAVING en SQL sert à appliquer des conditions aux résultats agrégés après le regroupement des données. Elle est généralement utilisée conjointement avec la clause GROUP BY et permet de filtrer les données après agrégation. En utilisant HAVING, vous pouvez extraire uniquement les groupes qui répondent à des critères spécifiques.
Par exemple, HAVING peut être utilisé lorsque vous souhaitez sélectionner les clients dont le total des ventes dépasse un certain montant ou les groupes dont la moyenne des scores dépasse un seuil précis. Contrairement à la clause WHERE, qui applique des conditions aux lignes individuelles avant l’agrégation, HAVING applique des conditions aux résultats agrégés après le regroupement.
Exemple d’utilisation de la clause HAVING
Par exemple, la requête suivante extrait les clients dont le total des ventes dépasse 10 000 ¥ :
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING SUM(sales) > 10000;
Cette requête utilise la fonction SUM pour calculer le total des ventes de chaque client et n’extrait que ceux dont le total dépasse 10 000 ¥.
2. Syntaxe de base et utilisation de la clause HAVING
La syntaxe de base de la clause HAVING est la suivante :
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
Cette syntaxe regroupe les données avec la clause GROUP BY et filtre les résultats agrégés en spécifiant des conditions avec la clause HAVING. Par exemple, la requête suivante extrait les clients qui ont passé au moins 5 commandes dans la table des commandes :
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) >= 5;
Ici, la fonction COUNT compte le nombre de commandes pour chaque client, et seuls ceux ayant 5 commandes ou plus sont retenus.

3. Exemples d’application de la clause HAVING
La clause HAVING est un outil puissant pour l’analyse avancée des données lorsqu’elle est combinée avec des fonctions d’agrégation. Voici quelques exemples concrets.
Exemple 1 : Filtrer par total des ventes
Pour extraire les produits dont les ventes dépassent 10 000 ¥, utilisez la fonction SUM comme suit :
SELECT product_id, SUM(sales) AS total_sales
FROM products_table
GROUP BY product_id
HAVING SUM(sales) > 10000;
Cette requête calcule le total des ventes pour chaque produit et extrait ceux dont le total est supérieur à 10 000 ¥.
Exemple 2 : Filtrer par nombre de commandes
Pour extraire les clients qui ont passé 10 commandes ou plus :
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) > 10;
Cette requête calcule le nombre de commandes pour chaque client et ne retient que ceux qui ont passé 10 commandes ou plus.
4. Différence entre HAVING et WHERE
Les clauses HAVING et WHERE effectuent toutes deux du filtrage, mais elles sont appliquées à des étapes différentes.
Différence de moment d’application
- Clause WHERE : appliquée avant le regroupement, filtre les lignes individuelles.
- Clause HAVING : appliquée après le regroupement, filtre les résultats agrégés.
Par exemple, en combinant WHERE et HAVING dans une même requête, vous pouvez d’abord filtrer les données où les ventes sont d’au moins 1 000 ¥ avec WHERE, puis utiliser HAVING pour extraire les groupes dont le total des ventes dépasse 5 000 ¥.
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
WHERE sales >= 1000
GROUP BY customer_id
HAVING SUM(sales) > 5000;
Dans cette requête, les données filtrées par la clause WHERE sont regroupées avec GROUP BY, puis la clause HAVING est appliquée pour ne retenir que les clients dont le total des ventes dépasse 5 000 ¥.

5. Points importants à retenir lors de l’utilisation de la clause HAVING
Doit être utilisée avec des fonctions d’agrégation
Comme la clause HAVING filtre les résultats agrégés, elle doit être utilisée conjointement avec des fonctions d’agrégation telles que SUM ou COUNT. Pour des conditions portant sur des lignes individuelles, la clause WHERE est plus appropriée.
Utilisation des alias
Dans la clause HAVING, vous pouvez utiliser les alias spécifiés avec AS dans les expressions conditionnelles. Par exemple, vous pouvez attribuer un alias aux ventes totales et l’utiliser comme suit :
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING total_sales > 10000;
Cette requête extrait les clients dont les ventes totales dépassent 10 000 yens.
6. Résumé : comment utiliser la clause HAVING
La clause HAVING est un outil puissant pour filtrer de manière flexible les données agrégées en appliquant des conditions. Elle est particulièrement utile lors de l’analyse de données agrégées telles que les ventes ou le nombre de commandes, permettant une analyse efficace des données. En comprenant ses différences avec la clause WHERE et en les utilisant de manière appropriée ensemble, vous pouvez maximiser la flexibilité de vos requêtes SQL.

