PostgreSQL GROUP BY
La clause GROUP BY
de PostgreSQL est utilisée pour classer les données identiques dans des groupes. Elle est souvent utilisée avec des fonctions d'agrégation telles que COUNT
, SUM
, AVG
, MAX
ou MIN
pour effectuer des opérations sur chaque groupe de données.
Utilisation
La clause GROUP BY
est utilisée lorsque vous devez organiser les lignes qui ont les mêmes valeurs dans les colonnes spécifiées en lignes récapitulatives. Il suit l'instruction SELECT
et toute fonction d'agrégation pour déterminer comment les données doivent être regroupées.
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
Dans cette syntaxe, GROUP BY column1
regroupe l'ensemble des résultats par les valeurs de column1
.
Exemples
1. Groupement de base
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
Cet exemple compte le nombre d'employés dans chaque département en regroupant les résultats sur la base de la colonne department
.
2. Regroupement avec SUM
SELECT department, SUM(salary)
FROM employees
GROUP BY department;
Cette requête calcule le salaire total payé par département, en regroupant les lignes par department
et en additionnant la colonne salary
.
3. Regroupement avec plusieurs colonnes
SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;
Ici, la requête regroupe les données par department
et job_title
, en calculant le salaire moyen pour chaque combinaison unique de département et d'intitulé de poste.
4. Regroupement avec HAVING
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
Cet exemple filtre les données groupées pour n'inclure que les départements comptant plus de 10 employés à l'aide de la clause HAVING
.
Conseils et bonnes pratiques
- Ne sélectionnez que les colonnes nécessaires. N'utilisez que les colonnes que vous souhaitez grouper ou agréger pour garantir une exécution efficace de la requête.
- Classez vos résultats. Combinez
GROUP BY
avecORDER BY
pour trier vos résultats agrégés et faciliter l'analyse. Notez queORDER BY
est traité aprèsGROUP BY
, ce qui peut affecter les performances et les résultats. - Utilisez HAVING pour filtrer les groupes. Utilisez la clause
HAVING
pour filtrer les groupes après l'étape d'agrégation, contrairement àWHERE
qui filtre les lignes avant l'agrégation. - Veillez à ce que le regroupement soit correct. Pour éviter les erreurs, incluez toujours toutes les colonnes non agrégées de l'instruction
SELECT
dans la clauseGROUP BY
. - Tenez compte des performances avec les grands ensembles de données. Sachez que l'utilisation de
GROUP BY
avec de grands ensembles de données peut avoir un impact sur les performances. Envisagez d'indexer les colonnes utilisées dansGROUP BY
pour optimiser l'exécution des requêtes.