La clause HAVING de PostgreSQL est utilisée pour filtrer les enregistrements qui fonctionnent avec des fonctions agrégées. Elle vous permet de spécifier des conditions sur les groupes créés par la clause GROUP BY.
Utilisation
La clause HAVING est utilisée lorsque vous devez filtrer des groupes de données en conjonction avec des fonctions d'agrégation telles que SUM, COUNT ou AVG. Elle vient après la clause GROUP BY et avant ORDER BY si elle est utilisée.
SELECT column1,aggregate_function(column2)FROM table_name
GROUPBY column1
HAVING condition;Propulsé par
Dans cette syntaxe, HAVING condition filtre les résultats renvoyés par la clause GROUP BY sur la base des résultats de la fonction d'agrégation. Alors que WHERE filtre les lignes avant l'agrégation, HAVING applique des conditions après l'agrégation.
Exemples
1. Filtre de base pour les groupes
SELECT department,COUNT(*)FROM employees
GROUPBY department
HAVINGCOUNT(*)>10;Propulsé par
Cette requête liste les départements ayant plus de 10 employés en filtrant les groupes créés par la clause GROUP BY.
2. Utilisation de SUM avec HAVING
SELECT product_id,SUM(quantity)FROM sales
GROUPBY product_id
HAVINGSUM(quantity)>100;Propulsé par
Ici, la requête permet de retrouver les produits qui ont été vendus à plus de 100 unités en filtrant sur la base de la somme des quantités.
3. Condition complexe avec plusieurs agrégats
SELECT manager_id,COUNT(employee_id),AVG(salary)FROM employees
GROUPBY manager_id
HAVINGCOUNT(employee_id)>5ANDAVG(salary)<70000;Propulsé par
Cet exemple filtre les managers qui supervisent plus de cinq employés et dont le salaire moyen est inférieur à 70 000 dollars.
4. HAVING Sans GROUP BY
SELECTSUM(quantity)FROM sales
HAVINGSUM(quantity)>1000;Propulsé par
Cet exemple illustre l'utilisation de HAVING sans GROUP BY, en filtrant l'ensemble des données pour déterminer si la quantité totale est supérieure à 1000 unités.
Conseils et bonnes pratiques
Utilisation avec GROUP BY. HAVING est conçu pour fonctionner avec GROUP BY; assurez-vous que votre requête regroupe les données de manière appropriée, bien qu'il puisse également être utilisé sans lui pour l'agrégation de l'ensemble des données.
Optimisez avec des index. Envisagez d'indexer les colonnes utilisées dans la clause GROUP BY pour améliorer les performances.
Filtre précoce avec WHERE. Utilisez la clause WHERE pour filtrer les lignes avant l'agrégation pour plus d'efficacité.
Évitez le surmenage. Utilisez HAVING avec parcimonie, car le filtrage des résultats agrégés peut être gourmand en ressources.
La clause
HAVINGde PostgreSQL est utilisée pour filtrer les enregistrements qui fonctionnent avec des fonctions agrégées. Elle vous permet de spécifier des conditions sur les groupes créés par la clauseGROUP BY.Utilisation
La clause
HAVINGest utilisée lorsque vous devez filtrer des groupes de données en conjonction avec des fonctions d'agrégation telles queSUM,COUNTouAVG. Elle vient après la clauseGROUP BYet avantORDER BYsi elle est utilisée.Dans cette syntaxe,
HAVING conditionfiltre les résultats renvoyés par la clauseGROUP BYsur la base des résultats de la fonction d'agrégation. Alors queWHEREfiltre les lignes avant l'agrégation,HAVINGapplique des conditions après l'agrégation.Exemples
1. Filtre de base pour les groupes
Cette requête liste les départements ayant plus de 10 employés en filtrant les groupes créés par la clause
GROUP BY.2. Utilisation de SUM avec HAVING
Ici, la requête permet de retrouver les produits qui ont été vendus à plus de 100 unités en filtrant sur la base de la somme des quantités.
3. Condition complexe avec plusieurs agrégats
Cet exemple filtre les managers qui supervisent plus de cinq employés et dont le salaire moyen est inférieur à 70 000 dollars.
4. HAVING Sans GROUP BY
Cet exemple illustre l'utilisation de
HAVINGsansGROUP BY, en filtrant l'ensemble des données pour déterminer si la quantité totale est supérieure à 1000 unités.Conseils et bonnes pratiques
GROUP BY.HAVINGest conçu pour fonctionner avecGROUP BY; assurez-vous que votre requête regroupe les données de manière appropriée, bien qu'il puisse également être utilisé sans lui pour l'agrégation de l'ensemble des données.GROUP BYpour améliorer les performances.WHERE. Utilisez la clauseWHEREpour filtrer les lignes avant l'agrégation pour plus d'efficacité.HAVINGavec parcimonie, car le filtrage des résultats agrégés peut être gourmand en ressources.