Instruction GROUP BY PostgreSQL
Dans PostgreSQL,GROUP BYL'instruction est utilisée conjointement avec l'instruction SELECT pour regrouper des données identiques.
Dans une instruction SELECT, GROUP BY est placé après la clause WHERE et avant la clause ORDER BY.
Syntaxe
Voici la syntaxe de base de la clause GROUP BY :SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
La clause GROUP BY doit être placée après les conditions de la clause WHERE, et doit être placée avant la clause ORDER BY.
Dans la clause GROUP BY, vous pouvez regrouper par une ou plusieurs colonnes, mais les colonnes regroupées doivent exister dans la liste des colonnes.
Exemple
Créez la table COMPANY (Téléchargez le fichier SQL COMPANY), le contenu des données est le suivant :
exampledb# 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)
L'exemple suivant regroupe par la valeur du champ NAME afin de trouver le salaire total de chaque personne :
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
Les résultats suivants sont obtenus :
name | sum -------+------- Teddy | 20000 Paul | 20000 Mark | 65000 David | 85000 Allen | 15000 Kim | 45000 James | 10000 (7 rows)
Nous ajoutons maintenant trois enregistrements à la table CAMPANY à l'aide de l'instruction suivante :
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, la table COMPANY contient des noms en double, et les données sont les suivantes :
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)
Maintenant, regroupez par les valeurs du champ NAME pour trouver le salaire total de chaque client :
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
Les résultats obtenus à ce stade sont les suivants :
name | sum -------+------- Allen | 15000 David | 85000 James | 20000 Kim | 45000 Mark | 65000 Paul | 40000 Teddy | 20000 (7 rows)
L'exemple suivant utilise la clause ORDER BY avec la clause GROUP BY :
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
Les résultats suivants sont obtenus :
name | sum -------+------- Teddy | 20000 Paul | 40000 Mark | 65000 Kim | 45000 James | 20000 David | 85000 Allen | 15000 (7 rows)autres extensions