Accéder au contenu principal
Documents
FonctionsExpressionsKeywordsDéclarationsClauses

Clause HAVING de MySQL

La clause `HAVING` de MySQL est utilisée pour filtrer les enregistrements qui travaillent sur des données agrégées retournées par `GROUP BY`. Il vous permet de spécifier des conditions qui déterminent quels résultats de groupe sont inclus dans le résultat.

Utilisation

La clause `HAVING` est appliquée après `GROUP BY` pour filtrer les données basées sur des fonctions d'agrégation comme `SUM`, `COUNT`, ou `AVG`. Contrairement à la clause `WHERE`, qui ne peut pas opérer sur des données agrégées et qui est utilisée pour le filtrage au niveau des lignes, `HAVING` est spécifiquement conçue pour les conditions basées sur les agrégats.

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

Dans cette syntaxe, `HAVING condition` spécifie la condition basée sur l'agrégat pour filtrer les résultats groupés.

Note : Dans l'ordre d'exécution des clauses SQL, `HAVING` est traité après `GROUP BY` et avant `ORDER BY`.

Exemples

1. Utilisation de base de l'option HAVING

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5;

Cet exemple permet d'extraire les départements comptant plus de cinq employés en utilisant `HAVING` pour filtrer le résultat agrégé.

2. Utilisation de HAVING avec SUM

SELECT customer_id, SUM(order_total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 1000;

Ici, la clause `HAVING` filtre les clients qui ont dépensé plus de 1000 $ au total.

3. Conditions multiples dans HAVING

SELECT product_category, AVG(price) AS avg_price
FROM products
GROUP BY product_category
HAVING avg_price BETWEEN 100 AND 500 AND COUNT(product_id) > 10;

Cet exemple utilise plusieurs conditions dans `HAVING` pour trouver les catégories de produits dont le prix moyen est compris entre 100 et 500 $ et qui contiennent plus de dix produits.

4. Utilisation de HAVING avec ORDER BY

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5
ORDER BY num_employees DESC;

Cet exemple illustre l'utilisation de `ORDER BY` avec `HAVING`, pour trier les résultats des départements ayant plus de cinq employés dans l'ordre décroissant du nombre d'employés.

Conseils et bonnes pratiques

  • Utilisez `HAVING` pour un filtrage agrégé. Appliquez `HAVING` lorsque vous filtrez des résultats basés sur des données agrégées, et non pour le filtrage au niveau des lignes.
  • Combinez avec `GROUP BY`. Utilisez toujours `HAVING` avec `GROUP BY` car `HAVING` opère sur des données groupées.
  • Optimisez avec des index. Garantissez une exécution efficace des requêtes en utilisant des index sur les colonnes impliquées dans `GROUP BY`.
  • Limiter les conditions complexes. Gardez les conditions `HAVING` simples pour maintenir la performance et la lisibilité.

Amélioration de SQL pour les débutants

Acquérir les compétences SQL pour interagir avec vos données et les interroger.
Commencez à apprendre gratuitement