Función AVG en Oracle

La función AVG en Oracle se utiliza para calcular el promedio (o media aritmética) de un conjunto de valores no nulos. Es una herramienta esencial para obtener un valor representativo de un conjunto de datos numéricos, como el promedio de ventas, calificaciones u otras métricas en una tabla.

Como parte de las funciones de agregación en Oracle, AVG se puede aplicar a un conjunto completo de registros o dentro de grupos definidos mediante la cláusula GROUP BY. Es especialmente útil en análisis de datos, reportes y cálculos estadísticos. Es importante destacar que AVG ignora los valores nulos, lo que asegura que los datos faltantes no afecten los resultados del cálculo.

En este artículo, te mostraré cómo emplear la función AVG en tus consultas de Oracle para calcular promedios de manera efectiva y optimizar su uso en diferentes escenarios. Para más información, consulta la documentación oficial de la función AVG en Oracle.

Sintaxis

La sintaxis de la función AVG en Oracle es la siguiente:

select AVG(expresión)
from tabla;

La función AVG no es exclusiva de la cláusula SELECT. También es posible utilizarla en las cláusulas WHERE y HAVING.

Ejemplos

Usaremos la siguiente tabla llamada empleados para realizar los ejemplos (al final de la página está disponible el script para crear la tabla)

Función AVG en Oracle

Ejemplo básico

En el siguiente ejemplo obtenemos el sueldo medio de todos los empleados de la tabla empleados:

select AVG(sueldo)
from empleados;

Ejemplo agrupando

En este otro ejemplo obtenemos la media por cada puesto. Observa cómo necesitamos establecer una agrupación usando GROUP BY:

select puesto, AVG(sueldo)
from empleados
group by puesto;

Recuerda que si en la cláusula SELECT escribes mas campos que no usen la función de agregación, debes incluirlos en el GROUP BY.

Recuerda que en un consulta siempre se evalúa primero la cláusula FROM seguido del WHERE y por último la cláusula SELECT. Más información aquí.

Ejemplo con HAVING

En este otro ejemplo mostramos la media del sueldo agrupado por nombre, pero utilizamos la cláusula HAVING para indicar que la media del sueldo debe ser mayor de 60000:

select nombre, AVG(sueldo)
from empleados
group by nombre
having AVG(sueldo) > 60000;

La cláusula HAVING actúa como un WHERE, con la diferencia que debe utilizar funciones de agregación.

Ejemplo con distinct

Se puede utilizar la opción distinct para hacer la media de los valores distintos:

select AVG(sueldo),
       AVG(distinct sueldo)
from empleados;

Ejemplo completo

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

-- 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
select AVG(sueldo)
from empleados;

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

-- Mostramos el nombre y la media del sueldo
-- de la tabla empleados cuando la media del sueldo
-- sea mayor de 60000
select nombre, AVG(sueldo)
from empleados
group by nombre
having AVG(sueldo) > 60000;

-- Mostramos la media del sueldo 
-- comparado con la media de los
-- sueldos distintos
select AVG(sueldo),
       AVG(distinct sueldo)
from empleados;

Escribir un comentario