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