Group By Clause
La clause GROUP BY de PostgreSQL est utilisée en collaboration avec l'instruction SELECT pour regrouper les lignes d'une table dont les données sont identiques. Cela permet d'éliminer les redondances dans le résultat et/ou de calculer des agrégats qui s'appliquent à ces groupes.
La clause GROUP BY suit la clause WHERE dans une instruction SELECT et précède la clause ORDER BY.
Syntaxe
La syntaxe de base de la clause GROUP BY est donnée ci-dessous. La clause GROUP BY doit suivre les conditions de la clause WHERE et doit précéder la clause ORDER BY si elle est utilisée.
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN
Vous pouvez utiliser plus d'une colonne dans la clause GROUP BY. Assurez-vous que, quelle que soit la colonne que vous utilisez pour regrouper, cette colonne doit être disponible dans la liste des colonnes.
Exemple
Considérons la table COMPANY dont les enregistrements sont les suivants :
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Si vous voulez connaître le montant total du salaire de chaque client, alors la requête GROUP BY sera la suivante :
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
Cela donnerait le résultat suivant :
name | sum
-------+-------
Teddy | 20000
Paul | 20000
Mark | 65000
David | 85000
Allen | 15000
Kim | 45000
James | 10000
(7 rows)
Maintenant, créons trois enregistrements supplémentaires dans la table SOCIÉTÉ en utilisant les instructions INSERT suivantes :
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
Maintenant, notre table a les enregistrements suivants avec des noms en double :
id | name | age | address | salary
----+-------+-----+--------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
9 | James | 44 | Norway | 5000
10 | James | 45 | Texas | 5000
(10 rows)
Utilisons à nouveau la même instruction pour regrouper tous les enregistrements à l'aide de la colonne NOM, comme suit :
testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
Cela donnerait le résultat suivant :
name | sum
-------+-------
Allen | 15000
David | 85000
James | 20000
Kim | 45000
Mark | 65000
Paul | 40000
Teddy | 20000
(7 rows)
Utilisons la clause ORDER BY en même temps que la clause GROUP BY de la manière suivante :
testdb=# SELECT NAME, SUM(SALARY)
FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
Cela donnerait le résultat suivant :
name | sum
-------+-------
Teddy | 20000
Paul | 40000
Mark | 65000
Kim | 45000
James | 20000
David | 85000
Allen | 15000
(7 rows)
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !