Databases

T01-008-01 GROUP BY

Enunciado

La cláusula GROUP BY permite obtener subtotales de los valores presentes en una columna o expresión.

Sintaxis:

La cláusula GROUP BY la situaremos entre el WHERE y el ORDER BY.

SELECT columna1, columna2, ...
FROM tabla1, tabla2, ...
WHERE condición1, condición2, …
GROUP BY columna1, columna2, …
ORDER BY ordenación;

Ejemplo:

Antes de ver un ejemplo de una sentencia con la cláusula GROUP BY, conviene recordar que en consultas anteriores hemos trabajado con funciones de agregado, que permitían extraer información resumida de un conjunto de filas. Por ejemplo, podíamos informar sobre el salario medio (AVG()) de los empleados del esquema HR.

SELECT AVG(SALARY) AS "SALARIO MEDIO"
FROM HR.employees

SALARIO MEDIO
6461.831775...

También podíamos mostrar el salario medio de un determinado departamento:

SELECT AVG(SALARY) AS "SALARIO MEDIO"
FROM HR.employees

WHERE DEPARTMENT_ID = 60

SALARIO MEDIO
5760

Pero, sería ilógico tener que realizar una consulta por cada departamento para conocer cuál es el salario medio en cada uno de los departamentos. La incorporación de la cláusula GROUP BY nos va a permitir obtener un resultado parcial por cada uno de los elementos por los que se agrupa.

En el siguiente ejemplo, vamos a agrupar a los empleados por su DEPARTMENT_ID, de manera que todos los que tengan el mismo valor en ese atributo, participarán en la obtención del resultado parcial:

SELECT DEPARTMENT_ID, AVG(SALARY) AS "SALARIO MEDIO"
FROM HR.employees
GROUP BY DEPARTMENT_ID

DEPARTMENT_ID SALARIO MEDIO
50 3475.555555...
40 6500
110 10154
90 19333.333333...
30 4150
70 10000
- 7000
10 4400
20 9500
60 5760
100 8601.333333...
80 8955.882352...

Cualquiera de las funciones de agregado que vimos en el apartado de funciones, pueden ser utilizadas en conjunción con GROUP BY.

Ejercicio:

Muestra el salario MÍNIMO y MÁXIMO de los empleados de cada uno de los tipos de trabajo existentes.

Ordena el resultado alfabéticamente, en orden inverso, según el tipo de trabajo.

Tipo

SELECT

Solución


												
SELECT JOB_ID, MIN(SALARY) AS "SALARIO MINIMO", MAX(SALARY) AS "SALARIO MAXIMO" FROM HR.employees GROUP BY JOB_ID ORDER BY JOB_ID DESC

Prueba


											

Librerías (Onfly databases)