Función MIN en Oracle

La función MIN en Oracle es una de las funciones de agregación más comunes, utilizada para obtener el valor mínimo dentro de un conjunto de valores no nulos. Esta función es compatible con diversos tipos de datos, incluyendo números, cadenas de texto, fechas, horas y más, permitiendo su uso en una amplia variedad de escenarios.

Con MIN, puedes identificar de manera rápida el valor más bajo en un conjunto de registros, lo cual resulta útil para casos como encontrar el salario más bajo en una tabla de empleados, la fecha más antigua en una lista de eventos o el menor precio en un catálogo de productos. Además, combinada con la cláusula GROUP BY, permite obtener el valor mínimo por grupos específicos, como el menor precio por categoría de producto.

En este artículo, te explicaré cómo emplear la función MIN en Oracle para optimizar tus consultas y obtener resultados precisos de forma eficiente. Para más información, consulta la documentación oficial de la función MIN en Oracle.

Sintaxis

La sintaxis de la función MIN es la siguiente:

select MIN(expresión)
from tabla

La función MIN 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 crearla)

Función MIN en Oracle

Ejemplo básico

En el siguiente ejemplo obtenemos el mínimo sueldo de la tabla empleados o lo que es lo mismo, el sueldo del empleado que menos salario tiene:

select MIN(sueldo)
from empleados;

Ejemplo agrupado

En este otro ejemplo obtenemos el valor mínimo por cada puesto. Observa cómo necesitamos establecer una agrupación usando GROUP BY:

select puesto, MIN(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.

Ejemplo con subconsulta

En este ejemplo utilizamos una subconsulta que nos devuelve el sueldo mínimo de la tabla empleados para después mostrar todos los datos de los empleados que tengas dicho sueldo:

select *
from empleados
where sueldo = (select MIN(sueldo) sueldo
                from empleados);

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 el sueldo máximo agrupado por nombre, pero utilizamos la cláusula HAVING para indicar que el máximo sueldo debe ser menos de 80000:

select nombre, MIN(sueldo)
from empleados
group by nombre
having MIN(sueldo) < 80000;

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

Ejemplo con fechas

Si se utiliza con fechas nos devolverá la mínima fecha como en el siguiente ejemplo:

select MIN(fecha_alta)
from empleados;

Ejemplo con cadena

Si se utiliza con cadenas nos devolverá la primera cadena ordenada alfabéticamente como en el siguiente ejemplo:

select MIN(nombre)
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 el sueldo mínimo de la tabla empleados
select MIN(sueldo)
from empleados;

-- Mostramos el sueldo mínimo de la tabla empleados
-- por puesto
select puesto, MIN(sueldo)
from empleados
group by puesto;

-- Mostramos todos los datos de la tabla empleados
-- donde el sueldo sea igual al mínimo sueldo
select *
from empleados
where sueldo = (select MIN(sueldo) sueldo
				from empleados);

-- Mostramos el nombre y el mínimo sueldo
-- de la tabla empleados cuando el sueldo
--minimo sea menor de 80000
select nombre, MIN(sueldo)
from empleados
group by nombre
having MIN(sueldo) < 80000;

-- Mostramos la fecha más baja
select MIN(fecha_alta)
from empleados;

-- Mostramos el primer nombre 
-- ordenado alfabeticamente
select MIN(nombre)
from empleados;

Escribir un comentario