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