Résumé : dans ce tutoriel, vous apprendrez à utiliser la clause MySQL HAVING pour spécifier une condition de filtre pour des groupes de lignes ou des agrégats.

Introduction à la clause HAVING de MySQL

La clause HAVING est utilisée dans l’instruction SELECT pour spécifier des conditions de filtre pour un groupe de lignes ou d’agrégats.

La clause HAVING est souvent utilisée avec la clause GROUP BY pour filtrer des groupes en fonction d’une condition spécifiée. Si la clause GROUP BY est omise, la clause HAVING se comporte comme la clause WHERE.

Les éléments suivants illustrent la syntaxe de la clause HAVING:

SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
Code language: SQL (Structured Query Language) (sql)

Dans cette syntaxe, vous spécifiez une condition dans la clause HAVING. Si une ligne, générée par la clause group by, provoque l’évaluation à true de la group_condition, la requête l’inclura dans le jeu de résultats.

Notez que la clause HAVING applique une condition de filtre à chaque groupe de lignes, tandis que la clause WHERE applique la condition de filtre à chaque ligne individuelle.

MySQL évalue la clause HAVING après les clauses FROMWHERESELECT et GROUP BY clauses et avant ORDER BY, et LIMIT clauses.

Notez que le standard SQL spécifie que le HAVING est évalué avant la clause SELECT et après la clause GROUP BY.

Exemples de la clause HAVING de MySQL

Prenons quelques exemples d’utilisation de la clause HAVING pour voir comment elle fonctionne. Nous utiliserons la table orderdetails de la base de données exemple pour la démonstration.

Ce qui suit utilise la clause GROUP BY pour obtenir les numéros de commande, le nombre d’articles vendus par commande et les ventes totales pour chacune d’elles à partir de la table orderdetails :

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Code language: SQL (Structured Query Language) (sql)

Essayez-le

Maintenant, vous pouvez trouver quelle commande a des ventes totales supérieures à 1000 en utilisant la clause HAVING comme suit :

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Code language: SQL (Structured Query Language) (sql)

Essayez-le

Vous pouvez construire une condition complexe dans la clause HAVING en utilisant des opérateurs logiques tels que OR et AND.

L’exemple suivant utilise la clause HAVING pour trouver les commandes dont le montant total est supérieur à 1000 et qui contiennent plus de 600 articles :

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Code language: SQL (Structured Query Language) (sql)

Essayez-le

Supposons que vous vouliez trouver toutes les commandes qui sont en état expédié et dont le montant total est supérieur à 1500, vous pouvez joindre la table orderdetails avec la table orders en utilisant la clause INNER JOIN et appliquer une condition sur la colonne status et l’agrégat total comme indiqué dans la requête suivante :

SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Code language: SQL (Structured Query Language) (sql)

Essayez-le

La HAVING n’est utile que lorsque vous l’utilisez avec la clause GROUP BY pour générer la sortie des rapports de haut niveau.haut niveau. Par exemple, vous pouvez utiliser la clause HAVING pour répondre à des questions comme trouver le nombre de commandes de ce mois, de ce trimestre ou de cette année dont le total des ventes est supérieur à 10K.

Dans ce tutoriel, vous avez appris à utiliser la clause MySQL HAVING avec la clause GROUP BY pour spécifier des conditions de filtre pour des groupes de lignes ou des agrégats.

  • Ce tutoriel vous a-t-il été utile ?
  • OuiNon

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *