SQL - Clause HAVING

Bonjour, futurs magiciens SQL ! Aujourd'hui, nous allons entreprendre un voyage passionnant à la découverte de la clause HAVING en SQL. En tant que votre professeur d'informatique du coin, je suis là pour vous guider à travers cette aventure, étape par étape. Alors, prenez vos carnets virtuels, et plongeons dedans !

SQL - Having Clause

La Clause HAVING en SQL

Imaginez que vous essayez d'organiser une fête, mais que vous ne voulez inviter que des amis qui ont plus de cinq amis communs avec vous. C'est exactement ce que fait la clause HAVING en SQL - elle nous aide à filtrer les résultats de groupe basés sur des conditions spécifiques.

La clause HAVING est comme le videur à la porte de votre fête de données. Il décide quelles groupes de données peuvent entrer en fonction des règles que vous fixez. Regardons un exemple simple :

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

Dans cet exemple, nous regardons le salaire moyen de chaque département, mais nous ne voulons voir que les départements où le salaire moyen est supérieur à 50 000 $. La clause HAVING est notre videur, vérifiant chaque groupe (département) et ne laissant entrer que ceux qui remplissent nos critères.

HAVING avec la Clause GROUP BY

La clause HAVING est souvent utilisée de pair avec GROUP BY, comme deux meilleurs amis qui ne se quittent jamais. Alors que GROUP BY organise nos données en groupes, HAVING filtre ces groupes en fonction de conditions.

Regardons un autre exemple :

SELECT product_category, COUNT(*) as product_count
FROM products
GROUP BY product_category
HAVING COUNT(*) > 10
ORDER BY product_count DESC;

Voici ce qui se passe :

  1. Nous groupons les produits par catégorie.
  2. Nous comptons combien de produits il y a dans chaque catégorie.
  3. La clause HAVING ne laisse passer que les catégories avec plus de 10 produits.
  4. Enfin, nous classons les résultats par le nombre de produits en ordre décroissant.

C'est comme organiser votre placard, mais ne garder que les sections avec plus de 10 articles, et les ranger du plus au moins nombreux.

HAVING avec la Clause ORDER BY

Comme vous l'avez vu dans l'exemple précédent, HAVING s'entend bien avec ORDER BY également. Regardons un autre exemple :

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

Cette requête est comme trouver vos clients VIP :

  1. Nous groupons les commandes par client.
  2. Nous sommons le total dépensé par chaque client.
  3. La clause HAVING filtre pour les clients qui ont dépensé plus de 1000 $.
  4. Nous classons ces clients VIP du plus grand dépenseur au plus petit.

Clause HAVING avec la Fonction COUNT()

La fonction COUNT() est comme un fidèle sidekick à HAVING, toujours prêt à aider à compter les choses. Voici un exemple :

SELECT author, COUNT(book_id) as book_count
FROM books
GROUP BY author
HAVING COUNT(book_id) >= 5
ORDER BY book_count DESC;

Cette requête trouve les auteurs prolifiques :

  1. Nous groupons les livres par auteur.
  2. Nous comptons combien de livres chaque auteur a écrit.
  3. La clause HAVING garde seulement les auteurs avec 5 ou plus de livres.
  4. Nous classons les résultats pour voir les auteurs les plus prolifiques en premier.

Clause HAVING avec la Fonction AVG()

AVG() est un autre grand ami de HAVING. Voyons-les en action :

SELECT department, AVG(performance_score) as avg_score
FROM employee_performance
GROUP BY department
HAVING AVG(performance_score) > 8.5
ORDER BY avg_score DESC;

Cette requête est comme trouver les départements avec des performers vedettes :

  1. Nous groupons les scores de performance par département.
  2. Nous calculons le score moyen pour chaque département.
  3. La clause HAVING garde seulement les départements avec un score moyen supérieur à 8.5.
  4. Nous classons les résultats pour voir les départements les plus performants en premier.

Clause HAVING avec la Fonction MAX()

Pour finir, voyons comment HAVING fonctionne avec MAX() :

SELECT product_category, MAX(price) as highest_price
FROM products
GROUP BY product_category
HAVING MAX(price) > 1000
ORDER BY highest_price DESC;

Cette requête trouve les catégories de produits de luxe :

  1. Nous groupons les produits par catégorie.
  2. Nous trouvons le prix maximum dans chaque catégorie.
  3. La clause HAVING garde seulement les catégories avec au moins un produit au prix supérieur à 1000 $.
  4. Nous classons les résultats pour voir les catégories avec les articles les plus chers en premier.

Et voilà, les amis ! Vous venez d'apprendre à utiliser la clause HAVING et ses amis en SQL. Souvenez-vous, la pratique fait toujours perfection, donc n'ayez pas peur d'expérimenter avec ces requêtes. Avant de savoir, vous écrirez des requêtes SQL complexes comme un pro !

Voici un tableau de référence rapide des méthodes que nous avons couvertes :

Méthode Description Exemple
HAVING Filtre les résultats groupés HAVING AVG(salary) > 50000
GROUP BY Groupe les lignes avec des valeurs similaires GROUP BY department
ORDER BY Trie le jeu de résultats ORDER BY total_spent DESC
COUNT() Compte le nombre de lignes HAVING COUNT(book_id) >= 5
AVG() Calcule la moyenne d'un ensemble de valeurs HAVING AVG(performance_score) > 8.5
MAX() Retourne la valeur maximale dans un ensemble HAVING MAX(price) > 1000

Bonne recherche, et que vos données soient toujours propres et vos requêtes efficaces !

Credits: Image by storyset