Agrupar registros usando GROUP BY en Oracle

Agrupar registros usando GROUP BY en Oracle es una funcionalidad clave para trabajar con grandes volúmenes de datos en tus consultas. Esta cláusula permite dividir las filas devueltas por un SELECT en grupos específicos según los valores de una o más columnas. Es especialmente útil cuando necesitas realizar cálculos agregados, como sumar, contar, promediar o encontrar valores máximos y mínimos en cada grupo.

La cláusula GROUP BY en Oracle se combina con funciones de agregación, como SUM, COUNT, AVG, entre otras, para obtener resultados precisos y organizados. Por ejemplo, puedes usarla para agrupar las ventas por región, calcular el total de ingresos por departamento o analizar promedios de rendimiento por categoría.

En este artículo, primero te mostraré la sintaxis básica de GROUP BY, y luego exploraremos ejemplos prácticos que te permitirán comprender cómo utilizarla eficazmente en tus consultas.

Para más información, puedes consultar la documentación oficial de ORACLE.

Sintaxis

La cláusula GROUP BY en Oracle se coloca después de la sentencia FROM o, si la consulta incluye condiciones, después de la cláusula WHERE. Es importante recordar que debe incluir todos los campos mencionados en el SELECT que no estén asociados a una función de agregación. De esta forma, Oracle puede agrupar correctamente los registros según los criterios especificados.

La sintaxis básica es la siguiente:

select campo, sum(cantidad)
from nombreTabla
where condicion
group by campo
order by campo;

La cláusula GROUP BY en Oracle permite utilizar alias definidos en el SELECT, nombres de columnas especificados en el FROM, e incluso la posición numérica de los campos según el orden en el SELECT. Esto brinda flexibilidad al estructurar tus consultas y agrupar registros de forma más eficiente y legible.

Ejemplos

Utilizaremos la tabla empleados como base para los ejemplos prácticos de este artículo. Al final de la página encontrarás el script necesario para crear esta tabla y replicar los ejercicios por tu cuenta.

Agrupación con funciones de agregación

La forma más común de agrupar registros en GROUP BY en Oracle es incluir en el SELECT y en el GROUP BY todos los campos por los que deseas realizar la agrupación, junto con al menos un campo que utilice una función de agregación. Esto permite generar resultados resumidos para cada grupo. En el siguiente ejemplo, calculamos la media de los sueldos por puesto de trabajo:

select puesto,
 avg(sueldo)
from empleados
group by puesto;
Agrupar registros usando GROUP BY en Oracle

Agrupación sin funciones de agregación

El siguiente ejemplo es menos común, ya que la cláusula GROUP BY en Oracle actúa de manera similar a un DISTINCT, agrupando registros que comparten los mismos valores en las columnas especificadas:

select puesto
from empleados
group by puesto;

Ejemplo completo

Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios.

-- www.MiguelTroyano.com
-- Borramos la tabla si existe
drop table empleados;

-- Creamos la tabla
create table empleados
(
    id_empleado numeric(2,0),
    id_departamento numeric(2,0),
    nombre character varying(50),
    puesto character varying(50),
    fecha_alta date,
    sueldo integer
);

-- Insertamos valores
insert into empleados values (1,1,'Miguel Troyano','Analista',to_date('26/09/1986','DD/MM/YYYY'),60000);
insert into empleados values (2,1,'Ismael Troyano','Analista',to_date('01/01/2001','DD/MM/YYYY'),60000);
insert into empleados values (3,1,'Jose Troyano','Alta Dirección',to_date('01/01/2001','DD/MM/YYYY'),80000);
insert into empleados values (4,1,'Pilar Redondo','Alta Dirección',to_date('02/02/2002','DD/MM/YYYY'),80000);

-- Mostramos la media del sueldo de la tabla empleados
-- agrupado por puesto
select puesto,
 avg(sueldo)
from empleados
group by puesto;

-- Mostramos los diferentes puestos
select puesto
from empleados
group by puesto;

Escribir un comentario