logo oujood
🔍

Comment utiliser la clause HAVING en SQL

OUJOOD.COM

Tutoriel SQL HAVING: Définition et utilisation

L'opérateur SQL HAVING est utilisé pour filtrer les résultats d'une requête en fonction des valeurs d'une fonction d'agrégation. Il est souvent utilisé en combinaison avec la clause GROUP BY pour créer des rapports plus granulaires.

La clause HAVING est similaire à la clause WHERE, mais elle ne peut être utilisée qu'avec des fonctions d'agrégation. La clause WHERE, quant à elle, peut être utilisée pour filtrer les résultats d'une requête en fonction des valeurs de n'importe quelle colonne.

Syntaxe

 
SELECT [colonnes]
FROM [table]
GROUP BY [colonnes]
HAVING [condition]

Exemples pratiques d'utilisation

Exemple 1

Supposons que nous ayons la table suivante :

Exemple :     📋 Copier le code

 
CREATE TABLE produits (
id INT,
nom VARCHAR(255),
prix INT
);

INSERT INTO produits (id, nom, prix) VALUES
(1, 'Ordinateur portable', 1000),
(2, 'Téléphone portable', 500),
(3, 'Tablette', 300);

La requête suivante utilise la clause HAVING pour afficher tous les produits dont le prix est supérieur à 500 :

Exemple :     📋 Copier le code

 
SELECT nom, prix
FROM produits
GROUP BY nom
HAVING prix > 500;

Exemple 2

La requête suivante utilise la clause HAVING pour afficher le nombre de produits par catégorie dont le nombre de ventes est supérieur à 10 :

Exemple :     📋 Copier le code

 
SELECT nom_categorie, COUNT(id) AS nb_produits
FROM produits
GROUP BY nom_categorie
HAVING COUNT(id) > 10;

Astuces et conseils d'utilisation

  • La clause HAVING ne peut être utilisée qu'avec des fonctions d'agrégation.
  • La clause HAVING est exécutée après la clause GROUP BY.
  • La clause HAVING peut être utilisée pour créer des rapports plus granulaires.

Explication pas à pas

  1. Créez une requête SQL avec une clause GROUP BY.
  2. Ajoutez la clause HAVING après la clause GROUP BY.
  3. Spécifiez la condition de filtrage dans la clause HAVING.
  4. Exécutez la requête.

Conclusion

La clause HAVING est un outil puissant qui peut être utilisé pour filtrer les résultats d'une requête en fonction des valeurs d'une fonction d'agrégation. Elle est souvent utilisée en combinaison avec la clause GROUP BY pour créer des rapports plus granulaires.

Détails supplémentaires

  • La clause HAVING peut être utilisée avec n'importe quelle fonction d'agrégation, y compris les fonctions SUM(), COUNT(), AVG(), MIN() et MAX().
  • La condition de filtrage dans la clause HAVING peut être une expression booléenne composée de plusieurs opérateurs logiques, tels que AND, OR et NOT.
  • La clause HAVING peut être utilisée pour filtrer les résultats d'une requête en fonction des valeurs d'une fonction d'agrégation, même si la clause WHERE est également utilisée.

Exemples supplémentaires

Exemple 3

La requête suivante utilise la clause HAVING pour afficher tous les produits dont le prix est inférieur à la moyenne des prix :

Exemple :     📋 Copier le code

 
SELECT nom, prix
FROM produits
GROUP BY nom
HAVING prix < AVG(prix);

Exemple 4

La requête suivante utilise la clause HAVING pour afficher le nombre de produits par catégorie dont le nombre de ventes est supérieur à la moitié du nombre total de ventes :

Exemple :     📋 Copier le code

 
SELECT nom_categorie, COUNT(id) AS nb_produits
FROM produits
GROUP BY nom_categorie
HAVING COUNT(id) > (SELECT COUNT(*) / 2 FROM produits);

Exemple 5

La requête suivante utilise la clause HAVING pour afficher tous les produits dont le prix est supérieur à la médiane des prix :

Exemple :     📋 Copier le code

 
SELECT nom, prix
FROM produits
GROUP BY nom
HAVING prix > MEDIAN(prix);

Fonctions d'agrégation SQL

En SQL, les fonctions d'agrégation sont utilisées pour effectuer des calculs sur un ensemble de valeurs dans une colonne et retourner un seul résultat. Voici une liste des fonctions d'agrégation couramment utilisées en SQL :

  1. COUNT() : Cette fonction compte le nombre de lignes dans un groupe résultant.
  2. SUM() : Elle calcule la somme des valeurs numériques dans un groupe.
  3. AVG() : Calcule la moyenne des valeurs numériques dans un groupe.
  4. MIN() : Retourne la valeur minimale (la plus petite) d'une colonne dans un groupe.
  5. MAX() : Retourne la valeur maximale (la plus grande) d'une colonne dans un groupe.
  6. GROUP_CONCAT() (ou équivalent) : Cette fonction concatène les valeurs de texte dans un groupe en une seule chaîne de caractères, souvent en utilisant un séparateur spécifié.
  7. FIRST() ou LAST() : Retourne la première ou la dernière valeur dans un groupe, généralement utilisée avec un tri spécifique.
  8. STDEV() : Calcule l'écart-type des valeurs numériques dans un groupe, indiquant la dispersion des données.
  9. VAR() ou VARIANCE() : Calcule la variance des valeurs numériques dans un groupe, mesurant la dispersion des données par rapport à la moyenne.
  10. BIT_AND() : Effectue un "ET" bit à bit sur toutes les valeurs binaires dans un groupe.
  11. BIT_OR() : Effectue un "OU" bit à bit sur toutes les valeurs binaires dans un groupe.
  12. BIT_XOR() : Effectue un "OU exclusif" bit à bit sur toutes les valeurs binaires dans un groupe.
  13. COLLECT() : Cette fonction collecte les valeurs d'une colonne dans un tableau ou une liste.
  14. STRING_AGG() : Cette fonction concatène les valeurs de texte dans un groupe en une seule chaîne de caractères, avec un séparateur spécifié (similaire à GROUP_CONCAT).
  15. JSON_AGG() : Utilisée pour agréger des valeurs en tant qu'objet JSON.
  16. JSON_ARRAYAGG() : Agrège les valeurs en tant qu'array JSON.
  17. PERCENTILE_CONT() : Calcule la valeur correspondant à un pourcentage donné dans un ensemble de données trié.
  18. PERCENTILE_DISC() : Retourne la valeur discrète correspondant à un pourcentage donné dans un ensemble de données trié.
  19. MODE() : Identifie la valeur la plus fréquemment observée dans un ensemble de données.
  20. ARRAY_AGG() : Agrège les valeurs dans un tableau.

La disponibilité de ces fonctions peut varier en fonction du système de gestion de base de données (SGBD) que vous utilisez, car chaque SGBD peut avoir des fonctions spécifiques supplémentaires. Assurez-vous de consulter la documentation de votre SGBD pour obtenir la liste complète des fonctions d'agrégation disponibles.