Contenido de esta guía
Qué devuelve MAX
MAX devuelve el mayor valor no nulo de una expresión. Es útil para importes, fechas, puntuaciones y cualquier tipo que el motor pueda ordenar.
El resultado no incluye automáticamente las demás columnas de la fila. Preguntar por «el mayor total» y por «el pedido con mayor total» son necesidades distintas.
Sintaxis básica
SELECT MAX(expresion) AS maximo
FROM tabla
WHERE condicion;Ejemplo guiado: pedido enviado de mayor importe
Para obtener la fila completa ordenamos los pedidos enviados de mayor a menor y añadimos un desempate por id.
SELECT id, estado, total
FROM pedidos
WHERE estado = 'enviado'
ORDER BY total DESC, id ASC
LIMIT 1;| id | estado | total |
|---|---|---|
| 106 | enviado | 1088,0 |
MAX(total) devolvería 1088,0, pero no el identificador. El orden permite recuperar una fila concreta. Si quieres conservar todos los empates, compara contra una subconsulta con MAX(total).
Filtros, NULL y conjuntos vacíos
MAX omite los valores nulos. Si el filtro no deja ningún valor conocido, devuelve NULL. Ese resultado puede significar «no hay datos», no necesariamente cero ni una fecha mínima.
Error frecuente
Mezclar MAX con una columna sin relación garantizada
SELECT id, MAX(total) FROM pedidos no identifica de forma portable el pedido máximo. Usa ORDER BY ... DESC con un límite o una subconsulta que preserve los empates.
Comprueba lo aprendido
Busca el registro más reciente
Devuelve la fecha de registro más reciente de la tabla clientes. Usa el alias ultimo_registro.
fecha_registro.MAX(fecha_registro).Solución razonada
SELECT MAX(fecha_registro) AS ultimo_registro
FROM clientes;| ultimo_registro |
|---|
| 2025-05-22 |
La fecha más reciente de la base educativa es 2025-05-22.
Compatibilidad entre motores
MAX está ampliamente disponible, ignora valores nulos y devuelve el mismo tipo lógico que su entrada según las reglas del motor. La comparación de texto depende de la intercalación; para fechas, utiliza tipos o formatos que mantengan el orden cronológico.
Qué debes recordar
MAXdevuelve un valor agregado.- Para obtener la fila, ordena o usa una subconsulta.
- Define un desempate si solo quieres una fila.
- Sin valores conocidos, el resultado es
NULL.