2nd Dec 2022 6 minutes de lecture Tutoriel SQL HAVING Zahin Rahman sql apprendre sql avoir Table des matières La fonction de la clause HAVING SQL La syntaxe SQL HAVING Exemples de HAVING SQL Exemple 1 : HAVING avec COUNT() Exemple 2 : HAVING avec SUM() Exemple 3 : HAVING avec AVG() Maîtriser la clause HAVING de SQL Apprenez à utiliser la clause HAVING SQL pour filtrer des groupes à l'aide de vos propres conditions. La clause HAVING SQL est souvent un concept difficile à appréhender, surtout pour les débutants. De plus, ses cas d'utilisation spécifiques peuvent être difficiles à visualiser sans exemples précis basés sur des ensembles de données du monde réel. Dans ce tutoriel, vous apprendrez à appliquer la clause SQL HAVING pour filtrer des groupes d'enregistrements en fonction de conditions spécifiques. Vous verrez des exemples où nous appliquons ce concept pour résoudre des problèmes commerciaux sur un ensemble de données réaliste. La fonction de la clause HAVING SQL La clause SQL HAVING est généralement utilisée avec la clause GROUP BY pour filtrer des groupes de lignes retournées. Les lignes ne sont incluses dans le groupe que si la condition spécifiée est VRAIE. La clause SQL GROUP BY organise les données en groupes sur la base d'une ou de plusieurs valeurs communes ; elle est le plus souvent utilisée pour obtenir des informations récapitulatives et calculer des statistiques agrégées. Si vous souhaitez une mise à jour plus approfondie sur ce sujet, consultez cet article sur le SQL GROUP BY. Il peut y avoir une certaine confusion entre WHERE et HAVING, mais la différence s'explique facilement. La clause WHERE applique une condition sur l'ensemble de la colonne en filtrant les lignes individuelles. Elle ne fonctionne pas avec les fonctions d'agrégation telles que SUM() et AVG(). En revanche, HAVING applique des conditions de filtrage sur les groupes créés par la clause GROUP BY. Elle peut être utilisée avec les fonctions d'agrégation. Par exemple, considérons le tableau ci-dessous. Il présente une liste de clients regroupés par ville dans plusieurs pays. Si nous voulions voir les groupes de villes comptant 3 clients ou plus, nous aurions besoin d'une clause HAVING qui satisfasse cette condition pour chacune des villes (c'est-à-dire les groupes). CustomerIDCityCountry 009BerlinGermany 045BerlinGermany 101BerlinGermany 098BernSwitzerland 003BernSwitzerland 154Buenos AiresArgentina 111Buenos AiresArgentina 039Buenos AiresArgentina ……… 191WallaPoland En d'autres termes, la clause HAVING est essentiellement une clause WHERE qui opère sur les enregistrements renvoyés par GROUP BY. (Nous avons également une comparaison plus approfondie entre HAVING et WHERE si vous souhaitez aller plus loin). La syntaxe SQL HAVING HAVING ne fonctionnera pas sans la clause GROUP BY. Elle doit suivre la clause GROUP BY dans une requête et doit précéder la clause ORDER BY (si vous en utilisez une). Seuls les groupes qui répondent aux critères de HAVING seront renvoyés. Par exemple, essayons la requête suivante sur la table customers table : SELECT COUNT(CustomerID), City, Country FROM Customers WHERE Country = 'Brazil' GROUP BY City, Country HAVING COUNT(CustomerID) > 1 Que se passe-t-il dans cette requête ? Premièrement, la clause WHERE filtre les lignes applicables pour le pays "Brésil". Deuxièmement, la clause GROUP BY regroupe les entrées en fonction des valeurs des colonnes City et Country. Troisièmement, la clause HAVING filtre les groupes - dans ce cas, nous ne sommes intéressés que par les villes brésiliennes qui ont plus d'un client. Le site LearnSQL.fr SQL pour les débutants couvre la syntaxe et l'application de la clause HAVING dans un environnement attrayant et interactif. Je vous le recommande si vous souhaitez une pratique concrète. Mais d'abord, voyons d'autres exemples de HAVING. Exemples de HAVING SQL Plongeons dans des exemples présentant différentes fonctions d'agrégation afin de comprendre comment fonctionne réellement la clause HAVING. Nous allons utiliser la table client suivante OrderDetails suivante. Elle comporte un total de 518 lignes de données de commandes simples. Ces données comprennent des informations telles que les adresses Quantity et ProductID commandées, ainsi qu'une adresse unique OrderID pour chaque commande. OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 510249142 6102495140 ………… 518104432812 En tant qu'analyste de données, l'une de vos principales tâches consiste à obtenir des informations sur les données de vente. Nous allons explorer trois problèmes simples visant à trouver certaines de ces informations. Exemple 1 : HAVING avec COUNT() PROBLÈME : Lister tous les produits ayant fait l'objet de plus de 12 commandes individuelles. RECHERCHE : SELECT COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING COUNT(ProductID) > 12 RESULTAT : Number of Records: 5 COUNT(ProductID)ProductID 1431 1459 1362 1371 1472 Si nous n'avions pas inclus la clause HAVING, cette requête renverrait essentiellement le nombre d'enregistrements égal au nombre unique de ProductIDs. Ici, GROUP BY regroupe les commandes ayant le même ProductID. Ensuite, la clause HAVING place la condition de filtrage sur chacun de ces groupes et renvoie ceux dont le nombre est supérieur à 12. Exemple 2 : HAVING avec SUM() PROBLÈME : Lister tous les produits qui ont eu plus de 350 quantités totales commandées. RECHERCHE : SELECT SUM(Quantity), ProductID FROM OrderDetails GROUP BY ProductID HAVING SUM(Quantity) > 350 ORDER BY SUM(Quantity) DESC RESULTAT : Number of Records: 3 COUNT(ProductID)ProductID 45831 43060 36935 Dans l'exemple ci-dessus, GROUP BY regroupe de façon similaire les commandes par ProductID. Ensuite, la clause HAVING place la condition de filtrage (la somme de la colonne Quantity doit être supérieure à 350) sur chacun de ces groupes. Enfin, ORDER BY renvoie les résultats dans l'ordre décroissant. Exemple 3 : HAVING avec AVG() PROBLÈME : Lister tous les produits qui ont eu plus de 35 quantités commandées en moyenne et au moins 4 commandes passées. RECHERCHE : SELECT AVG(Quantity), COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING AVG(Quantity) > 35 AND COUNT(ProductID) > 3 ORDER BY AVG(Quantity) DESC RESULTAT : Number of Records: 6 AVG(Quantity)ProductIDCOUNT(ProductID) 41.25234 41359 38.75584 35.836012 35.6445 35.11339 Dans l'exemple 3, après avoir regroupé les commandes par ProductID, la clause HAVING place deux conditions de filtrage sur les groupes : une quantité moyenne de commande supérieure à 35 et un nombre de commandes individuelles supérieur à 3. Sur la base des trois exemples ci-dessus, nous avons appris que ProductID 31, par exemple, était inclus dans le plus grand nombre de commandes individuelles (14) et avait également le plus grand nombre de quantités commandées sur l'ensemble des commandes passées (458). C'est certainement l'un des produits les plus populaires du magasin ! En outre, ProductIDs 23, 35 et 58 ont enregistré les quantités moyennes les plus élevées par commande. Des informations clés comme celles-ci sont précieuses, car elles permettent aux entreprises de savoir sur quels produits se concentrer et comment les commercialiser. Maîtriser la clause HAVING de SQL Comme nous venons de le voir, la clause HAVING est indispensable pour calculer des valeurs agrégées sur des groupes de données. Ainsi, elle est toujours utilisée en combinaison avec une clause GROUP BY et restreint les données sur les enregistrements groupés plutôt que sur les enregistrements individuels. Si vous souhaitez en savoir plus sur l'utilisation de la clause HAVING en SQL, essayez notre cours SQL pour les débutants . Il couvre la clause HAVING en détail et explique plus en détail le regroupement, le filtrage et le classement des données. Vous y trouverez également de nombreux problèmes pratiques et des quiz qui vous permettront de vous familiariser avec les bases du langage SQL. Tags: sql apprendre sql avoir