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
:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
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 FROM
WHERE
SELECT
et GROUP BY
clauses et avant ORDER BY
, et LIMIT
clauses.
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
:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Essayez-le
Maintenant, vous pouvez trouver quelle commande a des ventes totales supérieures à 1000
en utilisant la clause HAVING
comme suit :
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
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 :
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
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 :
Code language: SQL (Structured Query Language) (sql)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;
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
.