Accéder au contenu principal
Documents
Gestion des tableaux et des schémasSyntaxe de baseDéclencheursBases de donnéesFonctions de la dateFonctions des chaînes de caractèresFonctions mathématiquesFonctions JSONIndexes

PostgreSQL HAVING

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
GROUP BY column1
HAVING condition;

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
GROUP BY department
HAVING COUNT(*) > 10;

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
GROUP BY product_id
HAVING SUM(quantity) > 100;

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
GROUP BY manager_id
HAVING COUNT(employee_id) > 5 AND AVG(salary) < 70000;

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

SELECT SUM(quantity)
FROM sales
HAVING SUM(quantity) > 1000;

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.