La función MAX en Oracle es una de las funciones de agregación más utilizadas, diseñada para devolver el valor máximo dentro de un conjunto de datos o columna. Esta función es altamente versátil y se puede aplicar a distintos tipos de datos, como números, cadenas, fechas y horas, así como a tipos más avanzados disponibles en Oracle.
Con MAX, puedes identificar el valor más alto dentro de un conjunto de registros, lo que resulta clave en cálculos, análisis y resúmenes de datos. Además, en consultas con agrupación mediante la cláusula GROUP BY, esta función permite obtener el valor máximo en cada grupo, proporcionando información detallada y relevante.
En este artículo, te mostraré cómo usar la función MAX en Oracle en diversos escenarios, optimizando su implementación para obtener el mejor rendimiento y destacando sus aplicaciones más comunes. Para más información, consulta la documentación oficial de la función MAX en Oracle.
Versión
Este artículo ha sido redactado utilizando la versión Oracle Database 23ai para garantizar compatibilidad y precisión en los ejemplos presentados.
Sintaxis
La sintaxis de la función MAX en Oracle es la siguiente:
select MAX(expresión) from tabla
La función MAX 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)

Obtener el sueldo más alto de todos los empleados
SELECT MAX(SUELDO) FROM EMPLEADOS;
Explicación: La función MAX
devuelve el valor máximo en la columna sueldo
de la tabla empleados
.

Obtener el sueldo máximo por departamento
SELECT ID_DEPARTAMENTO, MAX(SUELDO) AS SUELDO_MAXIMO FROM EMPLEADOS GROUP BY ID_DEPARTAMENTO;
Explicación: Agrupa los datos por departamento
y devuelve el sueldo más alto de cada grupo.

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.
Uso típico: Comparar el máximo de una métrica dentro de categorías específicas.
Obtener el nombre del empleado con el sueldo más alto
SELECT NOMBRE, SUELDO FROM EMPLEADOS WHERE SUELDO = ( SELECT MAX(SUELDO) FROM EMPLEADOS );
Explicación: Utiliza una subconsulta para encontrar el sueldo más alto en la tabla y luego selecciona el empleado que tiene ese sueldo.

Uso típico: Identificar a la persona o entidad asociada con el valor máximo.
Recuerda que en un consulta siempre se evalúa primero la cláusula FROM seguido del WHERE y por ultimo la cláusula SELECT. Más información aquí.
Filtrar grupos con MAX
y HAVING
SELECT ID_DEPARTAMENTO, MAX(SUELDO) AS SUELDO_MAXIMO FROM EMPLEADOS GROUP BY ID_DEPARTAMENTO HAVING MAX(SUELDO) > 7000;
Encuentra el sueldo máximo en cada departamento y filtra aquellos donde el sueldo más alto sea mayor a 7000.

Uso típico: Identificar grupos destacados según sus valores máximos.
La cláusula HAVING actúa como un WHERE, con la diferencia que debe utilizar funciones de agregación.
Obtener la fecha más reciente de contratación
SELECT MAX(FECHA_ALTA) AS FECHA_RECIENTE FROM EMPLEADOS;
Explicación: Encuentra la fecha más reciente en la columna fecha_
alta

Uso típico: Determinar el registro más reciente en un conjunto de datos temporales.
Obtener el máximo combinando cálculos
SELECT MAX(SUELDO * 1.1) AS SUELDO_MAXIMO_INCREMENTADO FROM EMPLEADOS;
Explicación: Calcula un incremento del 10% para cada sueldo y luego devuelve el valor máximo resultante.

Uso típico: Realizar análisis considerando ajustes o proyecciones.
Ejemplo completo
Copia y pega el siguiente código en tu consola de Oracle y realiza paso a paso leyendo los comentarios:
🚫 Acceso restringido
Para visualizar las instrucciones, es necesario iniciar sesión.
Puedes hacerlo sin registrarte desde el lateral derecho o los comentarios, utilizando tu cuenta de Microsoft o Google.
Fin acceso restringido 🚫