La función MAX() en SQL se utiliza para obtener el valor máximo de una columna.
Es una de las funciones de agregación más importantes, junto con MIN(), SUM(), AVG() y COUNT().
👉 Se aplica principalmente sobre columnas numéricas, de fecha y de texto (ordenadas alfabéticamente).
Sintaxis básica de MAX()
SELECT MAX(columna)
FROM tabla
[WHERE condición];
columna: el campo sobre el cual se busca el valor máximo.tabla: la tabla que contiene los datos.- WHERE: opcional, filtra filas antes de calcular el máximo (ver WHERE).
Ejemplo básico de MAX()
Tabla productos:
| id | nombre | precio |
|---|---|---|
| 1 | Teclado | 25 |
| 2 | Monitor | 180 |
| 3 | Notebook | 750 |
| 4 | Mouse | 20 |
Consulta:
SELECT MAX(precio) AS precio_maximo
FROM productos;
Resultado:
| precio_maximo |
|---|
| 750 |
👉 Devuelve el producto con mayor precio.
Ejemplos prácticos de MAX()
1) Obtener la fecha más reciente de un pedido
SELECT MAX(fecha) AS ultima_compra
FROM pedidos;
2) Obtener el salario más alto
SELECT MAX(salario) AS salario_maximo
FROM empleados;
3) MAX() con condición
SELECT MAX(total) AS pedido_grande
FROM pedidos
WHERE cliente_id = 10;
👉 Devuelve el pedido más grande de un cliente específico.
4) MAX() con texto
SELECT MAX(nombre) AS ultimo_nombre
FROM clientes;
👉 Devuelve el nombre alfabéticamente mayor (ej.: «Zoe»).
5) MAX() con GROUP BY
Podemos usar MAX() junto con GROUP BY para obtener el valor máximo por grupo:
SELECT departamento, MAX(salario) AS salario_maximo
FROM empleados
GROUP BY departamento;
Resultado:
| departamento | salario_maximo |
|---|---|
| Ventas | 3000 |
| IT | 4500 |
| Marketing | 2800 |
👉 Devuelve el salario más alto en cada departamento.
6) Obtener la fila completa del valor máximo
SQL estándar no devuelve automáticamente la fila completa del valor máximo, solo el valor.
Para obtener la fila completa, podemos usar una subconsulta:
SELECT *
FROM empleados
WHERE salario = (
SELECT MAX(salario) FROM empleados
);
👉 Devuelve el empleado con el salario más alto.
En PostgreSQL y MySQL (8+), también se puede usar ORDER BY ... LIMIT 1:
SELECT * FROM empleados
ORDER BY salario DESC
LIMIT 1;
MAX() y valores NULL
MAX()ignora valores NULL.- Solo considera las filas con valores válidos.
Ejemplo:
SELECT MAX(precio)
FROM productos;
Si algunos precios son NULL, no afectan al resultado.
MAX() vs otras funciones
- MIN() → devuelve el valor mínimo.
- AVG() → devuelve el promedio.
- SUM() → devuelve la suma de valores.
- COUNT() → cuenta filas (con o sin
NULL).
👉 MAX() y MIN() son funciones opuestas.
Errores comunes al usar MAX()
- Pensar que devuelve varias filas
MAX()devuelve un único valor por consulta (salvo que se use conGROUP BY). - Olvidar usar GROUP BY
-- ❌ Error: MAX con otra columna sin agrupar
SELECT departamento, MAX(salario)
FROM empleados;
👉 Esto falla en SQL estándar.
Debe ser:
SELECT departamento, MAX(salario)
FROM empleados
GROUP BY departamento;
- Confundir MAX() con ORDER BY
MAX()devuelve el valor máximo.ORDER BY ... DESC LIMIT 1devuelve la fila entera con el valor máximo.
- Esperar que MAX() devuelva varias filas con el mismo valor máximo
Si hay empates,MAX()devuelve solo el valor, no todas las filas. Para obtenerlas, hay que usar una subconsulta.
Buenas prácticas con MAX()
- Usar alias (
AS) para que el resultado sea más legible. - Usar
GROUP BYsi se quieren valores máximos por categoría. - Para obtener filas completas, combinar
MAX()con subconsultas oORDER BY LIMIT 1. - Asegurarse de que la columna usada en
MAX()tenga un tipo de datos correcto (ej.: numérico para cálculos).
Ejemplo avanzado: producto más caro por categoría
SELECT categoria, nombre, precio
FROM productos p
WHERE precio = (
SELECT MAX(precio)
FROM productos
WHERE categoria = p.categoria
);
👉 Devuelve el producto más caro en cada categoría.
MAX() en distintos motores
- MySQL: soportado.
- PostgreSQL: soportado.
- SQL Server: soportado.
- Oracle: soportado.
👉 Es parte del estándar SQL y funciona igual en todos los SGBD principales.
Preguntas frecuentes (FAQ)
1. ¿MAX() cuenta valores nulos?
No, los ignora.
2. ¿Puedo usar MAX() con texto?
Sí. Devuelve el valor alfabéticamente mayor.
3. ¿Qué diferencia hay entre MAX() y ORDER BY?
MAX()devuelve un único valor.ORDER BY ... LIMIT 1devuelve la fila completa.
4. ¿Se puede usar MAX() en una subconsulta?
Sí, es común para obtener la fila con el valor máximo.
5. ¿Qué pasa si todas las filas son NULL?MAX() devuelve NULL.
Conclusión
La función MAX() en SQL es esencial para encontrar el valor máximo de una columna, ya sea un número, una fecha o un texto.
Se usa frecuentemente en reportes, estadísticas y comparaciones.
En combinación con GROUP BY, permite obtener máximos por grupo, y junto a subconsultas devuelve las filas asociadas al valor máximo.
Dominar su uso es clave para trabajar con consultas analíticas y reportes empresariales.
Revisa máximos y otros cálculos en Funciones de agregación y visita el Glosario SQL completo.