Declaración GROUP BY de PostgreSQL

En PostgreSQL,GROUP BYla declaración GROUP BY se usa junto con la declaración SELECT para agrupar datos iguales.

En una declaración SELECT, GROUP BY se coloca después de la cláusula WHERE y antes de la cláusula ORDER BY.

Sintaxis

A continuación se muestra la sintaxis básica de la cláusula GROUP BY:
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

La cláusula GROUP BY debe colocarse después de las condiciones de la cláusula WHERE y antes de la cláusula ORDER BY.

En la cláusula GROUP BY, puedes agrupar por una o más columnas, pero las columnas agrupadas deben existir en la lista de columnas.

Ejemplos

Crear la tabla COMPANY (Descargar el archivo SQL de COMPANY), los datos son los siguientes:

ejemplodb# 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)

El siguiente ejemplo agrupará por el valor del campo NAME para encontrar el salario total de cada persona:

ejemplodb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

Se obtiene el siguiente resultado:

  name  |  sum
 -------+-------
  Teddy | 20000
  Paul  | 20000
  Mark  | 65000
  David | 85000
  Allen | 15000
  Kim   | 45000
  James | 10000
(7 rows)

Ahora agregamos tres registros a la tabla COMPANY usando la siguiente declaración:

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);

Ahora la tabla COMPANY contiene nombres duplicados, los datos son los siguientes:

 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)

Ahora agrupamos nuevamente por el valor del campo NAME para encontrar el salario total de cada cliente:

ejemplodb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

El resultado obtenido es el siguiente:

name  |  sum
-------+-------
 Allen | 15000
 David | 85000
 James | 20000
 Kim   | 45000
 Mark  | 65000
 Paul  | 40000
 Teddy | 20000
(7 rows)

El siguiente ejemplo usa la cláusula ORDER BY junto con la cláusula GROUP BY:

ejemplodb=#  SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

Se obtiene el siguiente resultado:

name  |  sum
-------+-------
 Teddy | 20000
 Paul  | 40000
 Mark  | 65000
 Kim   | 45000
 James | 20000
 David | 85000
 Allen | 15000
(7 rows)
Otras extensiones