Clause HAVING dans les fonctions dagrégation SQL

Clause HAVING dans les fonctions dagrégation SQL

Dans ce didacticiel, nous discuterons de quelques façons d'utiliser ou d'exécuter la clause HAVING dans les fonctions d'agrégation SQL . L'utilisation de cette clause dans les fonctions d'agrégation SQL peut grandement faciliter la synthèse des données.

La clause HAVING est presque similaire à l'instruction WHERE et peut également être exécutée avec elle.

Nous discuterons de leurs corrélations et de leurs différences en fournissant des exemples au fur et à mesure de ce didacticiel.

Table des matières

Instructions GROUP BY et WHERE en SQL

Pour notre premier exemple, nous verrons comment exécuter la clause WHERE et GROUP BY à l'aide de l'exemple de table ci-dessous. Veuillez noter que nous ne pouvons utiliser la clause WHERE qu'avec des colonnes existantes et non dans les fonctions d'agrégation uniquement.

Clause HAVING dans les fonctions d'agrégation SQL

Supposons que nous voulions obtenir les ventes totales d'un produit en fonction de sa colonne SaleAmount où la valeur est supérieure à 2 . Pour obtenir le résultat, notre commande doit être la suivante :

Clause HAVING dans les fonctions d'agrégation SQL

Tout d'abord, nous sélectionnons le ProductName et agrégeons le SaleAmount pour obtenir le TotalSales. 

Clause HAVING dans les fonctions d'agrégation SQL

Ensuite, nous avons utilisé l' instruction WHERE ici puisque nous essayons d'obtenir uniquement les produits où le SaleAmount est supérieur à 2. La commande 'GROUP BY ProductName' indique qu'elle regroupera les lignes sous la colonne ProductName en une seule.

En exécutant notre ensemble de commandes, nous verrons que parmi toutes les données sous les colonnes ProductName et SaleAmount , seuls Bulb et Fan étaient affichés. C'est parce qu'ils étaient les seuls à avoir un SaleAmount supérieur à 2.

Clause HAVING dans les fonctions d'agrégation SQL

Dans cet exemple, l' instruction WHERE sert à filtrer les résultats avec une colonne existante, qui est notre SaleAmount . Notez également que l' instruction WHERE apparaît avant GROUP BY et ne peut pas être utilisée pour filtrer les fonctions d'agrégation. D'autre part, la clause HAVING apparaît après GROUP BY et est utilisée pour le filtrage basé sur une fonction d'agrégation. 

Clause GROUP BY et HAVING en SQL

Dans cet exemple, nous allons montrer la différence entre l' instruction WHERE et la clause HAVING . Nous utiliserons le même objectif que dans l'exemple précédent afin de pouvoir comparer et évaluer les résultats. 

Commençons par afficher les produits avec leurs ventes totales à l'aide de la commande ci-dessous. Comme vous pouvez le voir, notre première commande est toujours la même que notre première commande exécutant l' instruction WHERE .

Clause HAVING dans les fonctions d'agrégation SQL

Si nous devons exécuter nos deux premières commandes, nous aurons le résultat suivant :

Clause HAVING dans les fonctions d'agrégation SQL

Maintenant, disons que nous ne voulons afficher que les produits dont la vente totale est supérieure à 5. Nous ne pouvons pas utiliser l' instruction WHERE  car elle ne peut être utilisée qu'avec des colonnes existantes. Par conséquent, nous devons utiliser la clause HAVING car nous allons filtrer à partir d'une fonction d'agrégation. 

Clause HAVING dans les fonctions d'agrégation SQL

Remarquez comment nous utilisons la clause HAVING après GROUP BY contrairement à l' instruction WHERE utilisée avant GROUP BY. En effet, le SQL regroupera les enregistrements avant d'évaluer la clause HAVING

Exécutons ensuite ces commandes avec HAVING SUM(SaleAmount)>5 . Après avoir précisé que nous ne voulons obtenir que les produits dont le prix total est supérieur à 5, nous remarquerons que dans notre tableau de résultats actuel, nous ne verrons plus le stylo . C'est parce que son total est inférieur à 5

Clause HAVING dans les fonctions d'agrégation SQL

En bref, lorsque nous voulons filtrer les données de notre table en fonction d'une colonne existante, nous utilisons la clause WHERE , alors que lorsque nous voulons filtrer les données d'une fonction d'agrégation, nous utilisons la clause HAVING

Clause HAVING et WHERE dans SQL Server Management Studio (SSMS)

Maintenant, nous allons avancer en discutant et en démontrant comment nous pouvons exécuter la clause HAVING dans SQL Server Management Studio (SSMS). Nous aborderons également la différence entre la clause HAVING et la clause WHERE en fournissant des exemples.

Vous trouverez ci-dessous notre exemple de données SalesOrderHeader. Ces données se composent de 100 lignes. Pour notre exemple, nous voulons obtenir TotalSale par CustomerIDTotalSale est supérieur à 10000 . Notez que la vente totale est basée sur la somme des valeurs de la colonne TotalDue .

Clause HAVING dans les fonctions d'agrégation SQL

Tout d'abord, laissez-moi vous montrer pourquoi nous ne pouvons pas utiliser la clause WHERE lorsque nous voulons filtrer sur une fonction d'agrégation basée sur notre exemple ci-dessus. 

Nous utiliserons l'exemple de jeu de commandes de l'image ci-dessous. Comme vous pouvez le voir, nous avons techniquement le même ensemble de commandes que celui que nous avons dans notre tout premier exemple.

Cependant, lorsque nous cliquons sur Exécuter dans le coin supérieur gauche, cela entraînera une erreur car nous ne pouvons pas utiliser la clause WHERE seule lorsque nous filtrons sur la fonction d'agrégation.

Clause HAVING dans les fonctions d'agrégation SQL

Pour corriger l'erreur, nous devons filtrer le résultat en utilisant la clause HAVING au lieu de la clause WHERE . Notre nouvel ensemble de commandes devrait ressembler à l'image ci-dessous.

Clause HAVING dans les fonctions d'agrégation SQL

Maintenant, nous pouvons voir que notre erreur a été corrigée et contient les résultats par CustomerID avec un TotalSale supérieur à 10000 .

Encore une fois, la clause WHERE est toujours utilisée avant la clause GROUP BY , tandis que la clause HAVING est toujours utilisée après une clause GROUP BY .

Utilisation de la clause HAVING et de la clause WHERE en SQL  

Pour cet exemple, disons que nous voulons utiliser les clauses WHERE et HAVING en même temps. Essayons d'obtenir le TotalSale par CustomerIDTotalSale est supérieur à 10000 mais uniquement avec des clients où leur TerritoryID est égal à 1

Puisque nous voulons filtrer les résultats avec les clients qui ont 1 comme TerritoryID , nous utiliserons la clause WHERE. Notre commande devrait donc être la même que la précédente. Encore une fois, nous avons ajouté une clause WHERE avant la clause GROUP BY.

Clause HAVING dans les fonctions d'agrégation SQL

Pour l'instant, nous ne voyons pas beaucoup de différence entre notre précédent résultat et ce nouveau. Cependant, si vous regardez attentivement le coin inférieur droit, nous n'avons plus que 64 lignes par rapport à la précédente avec 505 lignes de données. En effet, les résultats sont également filtrés en fonction de leur TerritoryID .

Conclusion

Pour résumer, nous ne pouvons utiliser la clause WHERE qu'avec des colonnes existantes. Si nous devons filtrer avec des fonctions agrégées, nous devons utiliser la clause HAVING à la place.

L'utilisation de la clause HAVING dans les fonctions d'agrégation SQL et la pratique des méthodes d'exécution conjointes de la clause HAVING et de la clause WHERE peuvent être pratiques pour les utilisateurs lorsqu'ils travaillent sur un grand nombre de données ou d'enregistrements. 

J'espère vous avoir fourni suffisamment d'informations et de compréhension sur l'utilisation de la clause HAVING dans les fonctions d'agrégation SQL. Si vous souhaitez en savoir plus sur ce sujet et d'autres contenus connexes, vous pouvez certainement consulter la liste des liens pertinents ci-dessous.

Tous mes vœux,

Hafiz


Quest-ce que le self en Python ? Exemples concrets

Quest-ce que le self en Python ? Exemples concrets

Qu'est-ce que le self en Python ? Exemples concrets

Comment enregistrer et charger un fichier RDS dans R

Comment enregistrer et charger un fichier RDS dans R

Vous apprendrez à enregistrer et à charger des objets à partir d'un fichier .rds dans R. Ce blog expliquera également comment importer des objets de R vers LuckyTemplates.

First N Business Days Revisited - Une solution de langage de codage DAX

First N Business Days Revisited - Une solution de langage de codage DAX

Dans ce didacticiel sur le langage de codage DAX, découvrez comment utiliser la fonction GENERATE et comment modifier dynamiquement le titre d'une mesure.

Présentez des informations à laide de la technique des visuels dynamiques multi-threads dans LuckyTemplates

Présentez des informations à laide de la technique des visuels dynamiques multi-threads dans LuckyTemplates

Ce didacticiel explique comment utiliser la technique Multi Threaded Dynamic Visuals pour créer des informations à partir de visualisations de données dynamiques dans vos rapports.

Introduction au filtrage du contexte dans LuckyTemplates

Introduction au filtrage du contexte dans LuckyTemplates

Dans cet article, je vais parcourir le contexte du filtre. Le contexte de filtrage est l'un des principaux sujets que tout utilisateur de LuckyTemplates doit d'abord connaître.

Meilleurs conseils pour utiliser les applications dans le service en ligne LuckyTemplates

Meilleurs conseils pour utiliser les applications dans le service en ligne LuckyTemplates

Je souhaite montrer comment le service en ligne LuckyTemplates Apps peut aider à gérer différents rapports et informations générés à partir de diverses sources.

Analyser les changements de marge bénéficiaire au fil du temps - Analytics avec LuckyTemplates et DAX

Analyser les changements de marge bénéficiaire au fil du temps - Analytics avec LuckyTemplates et DAX

Découvrez comment calculer les modifications de votre marge bénéficiaire à l'aide de techniques telles que la création de branches de mesure et la combinaison de formules DAX dans LuckyTemplates.

Idées de matérialisation pour les caches de données dans DAX Studio

Idées de matérialisation pour les caches de données dans DAX Studio

Ce didacticiel abordera les idées de matérialisation des caches de données et comment elles affectent les performances des DAX dans la fourniture de résultats.

Rapports dentreprise à laide de LuckyTemplates

Rapports dentreprise à laide de LuckyTemplates

Si vous utilisez encore Excel jusqu'à présent, c'est le meilleur moment pour commencer à utiliser LuckyTemplates pour vos besoins en matière de rapports commerciaux.

Quest-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir

Quest-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir

Qu'est-ce que la passerelle LuckyTemplates ? Tout ce que tu as besoin de savoir