SQL HAVING : filtrer les résultats sur la base des fonctions d’agrégation

SQL HAVING est une condition qui peut être appliquée à des entrées déjà regroupées. Elle fonctionne avec des fonctions d’agrégation et est utilisée pour restreindre les ensembles de résultats.

Qu’est-ce que SQL HAVING ?

En plus du WHERE bien connu, il existe dans le Structured Query Language (SQL) une autre condition qui est souvent utilisée. SQL HAVING a été introduite pour filtrer les données en fonction de critères spécifiques après les avoir regroupées. Cette condition est appliquée avec la commande SQL SELECT et l’instruction SQL GROUP BY. Alors que cette dernière regroupe les résultats, SQL HAVING limite cet ensemble de résultats à l’aide de différentes fonctions d’agrégation. Cette condition a été introduite parce que WHERE ne peut pas interagir avec des fonctions d’agrégation comme SQL AVG(), SQL COUNT(), MAX(), MIN() et SUM(). SQL HAVING est utilisé après les instructions WHERE (si elles existent) et GROUP BY, mais avant ORDER BY.

Serveurs virtuels (VPS)
Faites le choix de la performance
  • Virtualisation complète avec accès root
  • Trafic illimité et jusqu'à 1 Gbit/s de bande passante
  • Stockage SSD NVMe rapide et édition Plesk Web Host

Syntaxe et fonctionnement

Pour comprendre le fonctionnement et l’utilité de SQL HAVING, examinons sa syntaxe. La voici :

SELECT nom_de_la_colonne(n)
FROM nom_du_tableau
WHERE condition
GROUP BY nom_de_la_colonne(n)
HAVING condition
ORDER BY nom_de_la_colonne(n);
sql

Souvent, une fonction d’agrégation est appliquée à une ou plusieurs colonnes. Ensuite, pour la localisation, on indique le nom de la table. La condition WHERE est facultative. GROUP BY rassemble des valeurs identiques en groupes qui sont filtrées de manière encore plus précise avec HAVING et placés dans l’ordre souhaité avec ORDER BY.

Exemple de condition

La manière la plus simple d’illustrer le fonctionnement de SQL HAVING est de prendre un exemple simple. Pour cela, nous créons un tableau appelé « Liste de clients ». Celui-ci contient les colonnes « Numéro de client », « Nom », « Ville » et « Articles » :

Numéro de client Nom Emplacement Articles
1427 Berron Paris 13
1377 Froissy Strasbourg 9
1212 Sulis Strasbourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Nous utilisons maintenant SQL HAVING pour savoir combien de clients et clientes de Strasbourg ont commandé dix articles ou plus. Pour cela, nous utilisons le code suivant et indiquons le nombre à l’aide d’un alias SQL comme « NombreCommandes » :

SELECT Ville, COUNT(Ville) AS NombreCommandes
FROM Liste_de_clients
WHERE Ville = 'Strasbourg'
GROUP BY Ville, Articles
HAVING Articles > 10;
sql

La sortie correspondante se présente comme suit :

Ville NombreCommandes
Strasbourg 1

La condition en combinaison avec INNER JOIN

Vous pouvez également combiner SQL HAVING avec le mot-clé « INNER JOIN ». Pour illustrer cela, créons une deuxième table nommée « Article_01 », qui enregistre le nombre d’occurrences et la date de commande pour chaque article. Cette table contient les colonnes suivantes : numéro de commande, numéro de client, quantité et date de commande. Voici un exemple de sa structure :

Numéro de commande Numéro de client Occurrences Date
00283 1427 4 2024-01-15
00284 1211 7 2024-01-19
00285 1275 15 2024-01-29
00286 1431 10 2024-02-01
00287 1427 9 2024-02-05

Maintenant, nous pouvons demander au système de nous montrer tous les clients qui ont passé plus d’une commande. Le code approprié est le suivant :

SELECT Liste de clients.Nom, COUNT(Article_01.Numéro de commande) AS NombreCommandes
FROM (Article_01
INNER JOIN Liste de clients ON Article_01.Numéro de client = Liste de clients.Numéro de client)
GROUP BY Nom
HAVING COUNT(Article_01.Numéro de commande) > 1;
sql

Voici la sortie que nous obtenons alors :

Nom NombreCommandes
Berron 2

Alternative à SQL HAVING

Une alternative à SQL HAVING est WHERE. Les deux options ne peuvent toutefois pas être utilisées exactement de la même manière. WHERE est utilisé pour des entrées individuelles et peut être combiné avec DELETE ou UPDATE en plus de SELECT. HAVING, en revanche, est exclusivement prévue pour les entrées groupées et n’est compatible qu’avec SELECT. WHERE est utilisé avant GROUP BY, tandis que HAVING s’utilise après. De plus, seul SQL HAVING peut travailler avec des fonctions d’agrégation.

Conseil

Un serveur parfaitement adapté à vos besoins : avec le serveur d’hébergement SQL de IONOS, vous choisissez entre MSSQL, MySQL et MariaDB et profitez d’une solide architecture de sécurité, d’excellentes performances et d’un conseil personnalisé à tout moment.

Cet article vous a-t-il été utile ?
Page top