MAX() en SQL: qué es, cómo funciona y ejemplos prácticos

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:

idnombreprecio
1Teclado25
2Monitor180
3Notebook750
4Mouse20

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:

departamentosalario_maximo
Ventas3000
IT4500
Marketing2800

👉 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()

  1. Pensar que devuelve varias filas
    MAX() devuelve un único valor por consulta (salvo que se use con GROUP BY).
  2. 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;
  1. Confundir MAX() con ORDER BY
  • MAX() devuelve el valor máximo.
  • ORDER BY ... DESC LIMIT 1 devuelve la fila entera con el valor máximo.
  1. 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 BY si se quieren valores máximos por categoría.
  • Para obtener filas completas, combinar MAX() con subconsultas o ORDER 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 1 devuelve 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.

Scroll al inicio