¡Domina la función MAX de MySQL! Obtén el máximo y usos prácticos

目次

1. Introducción

MySQL es un sistema de gestión de bases de datos ampliamente utilizado en todo el mundo. Entre sus funciones, la función MAX es una función de agregación importante que se utiliza con frecuencia en el análisis de datos y la creación de informes. Al aprovechar esta función, se puede obtener fácilmente el valor máximo de la columna especificada.

En este artículo, explicamos de manera clara desde el uso básico de la función MAX de MySQL hasta ejemplos de aplicación y puntos de atención. Nos esforzamos por ofrecer contenido útil para principiantes hasta usuarios de nivel intermedio, por lo que por favor, utilízalo como referencia.

2. Uso básico de la función MAX

La función MAX se puede usar con varios tipos de datos, como números, fechas, cadenas, etc. En esta sección, explicaremos en detalle el uso básico.

Sintaxis de la función MAX

A continuación se muestra la sintaxis básica de la función MAX.

SELECT MAX(nombre_de_columna) FROM nombre_de_tabla;

Usando esta sintaxis, se puede obtener el valor máximo de la columna especificada.

Ejemplo de uso en columnas numéricas

Ejemplo para obtener el salario más alto de la tabla de salarios de empleados.

SELECT MAX(salary) FROM employees;

Ejemplo de salida:

MAX(salary)
120000

Este resultado indica que el valor máximo en la columna salary es 120000.

Ejemplo de uso en columnas de fecha

Para obtener la fecha de contratación más reciente de los empleados, se escribe como sigue.

SELECT MAX(hire_date) FROM employees;

Ejemplo de salida:

MAX(hire_date)
2025-01-01

De este resultado, se entiende que la fecha de contratación más reciente es 2025-01-01.

Ejemplo de uso en columnas de cadena

La función MAX también se puede usar en columnas de cadena. En el caso de cadenas, devuelve el valor que aparece último en orden lexicográfico.

SELECT MAX(last_name) FROM employees;

Ejemplo de salida:

MAX(last_name)
Yamamoto

Este resultado indica que el nombre que aparece último en orden alfabético es Yamamoto.

3. Obtención del valor máximo con condiciones

La función MAX también se puede usar de manera condicional. En esta sección, explicamos cómo obtener el valor máximo de forma condicional.

Combinación con la cláusula WHERE

Para obtener el valor máximo especificando condiciones específicas, se utiliza la cláusula WHERE.

Ejemplo: Para obtener el salario más alto entre los empleados cuyo ID de departamento es 10

SELECT MAX(salary) FROM employees WHERE department_id = 10;

Ejemplo de salida:

MAX(salary)
90000

Esta consulta obtiene el salario máximo de los empleados cuyo ID de departamento es 10.

Ejemplos de aplicación en la práctica

También se utiliza una sintaxis similar para obtener el costo máximo relacionado con un proyecto específico.

SELECT MAX(cost) FROM projects WHERE project_status = 'active';

Esta consulta obtiene el costo máximo en los proyectos active.

4. Cómo obtener el valor máximo por grupo

Usando la cláusula GROUP BY de MySQL, se puede obtener el valor máximo para cada grupo específico. Por ejemplo, el salario más alto por departamento o las ventas máximas por mes, etc., es muy útil al agrupar y analizar datos. En esta sección, se explica en detalle cómo obtener el valor máximo por grupo.

Sintaxis básica

Para obtener el valor máximo por grupo, se describe de la siguiente manera.

SELECT columna_a_agrupar, MAX(columna_objetivo)
FROM nombre_tabla
GROUP BY columna_a_agrupar;

Al usar esta sintaxis, se agrupan los datos basados en la columna especificada y se obtiene el valor máximo dentro de cada grupo.

Ejemplo de uso: Obtener el salario más alto por departamento

A continuación, se muestra una consulta que obtiene el salario más alto por departamento de la tabla de empleados.

SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;

Ejemplo de salida:

department_idMAX(salary)
1120000
290000
380000

Este resultado muestra el salario máximo (MAX(salary)) para cada departamento (department_id).

Ejemplo de uso: Obtener las ventas máximas por mes

Para obtener las ventas máximas de cada mes de la tabla de ventas, se describe de la siguiente manera.

SELECT DATE_FORMAT(sale_date, '%Y-%m') AS sale_month, MAX(amount)
FROM sales
GROUP BY sale_month;

Ejemplo de salida:

sale_monthMAX(amount)
2025-0150000
2025-0270000
2025-0360000

En esta consulta, se formatea la columna sale_date en año-mes (%Y-%m) y se obtiene el monto máximo de ventas por mes.

Precauciones al usar GROUP BY

  1. Restricciones en las columnas incluidas en la cláusula SELECT
    Al usar la cláusula GROUP BY, las columnas incluidas en la cláusula SELECT deben ser una de las siguientes:
  • La columna especificada en la cláusula GROUP BY
  • Una función de agregación (por ejemplo: MAX, SUM, COUNT, etc.) Por ejemplo, la siguiente consulta generará un error.
   SELECT department_id, salary
   FROM employees
   GROUP BY department_id;

Razón: salary no está incluida en una función de agregación ni en la cláusula GROUP BY.

  1. Manejo de valores NULL
    Si la columna de agrupación contiene valores NULL, estos se tratan como un grupo separado. Por ejemplo, los datos con ID de departamento NULL también se calculan como un grupo.
  2. Optimización de rendimiento
    Al agrupar grandes cantidades de datos, el uso de índices mejora el rendimiento de la consulta. Configure índices según sea necesario.

5. Cómo obtener el registro completo con el valor máximo

Al usar la función MAX de MySQL, se puede obtener el valor máximo de una columna específica, pero con solo eso no se puede obtener el registro completo que tiene el valor máximo. En el análisis de datos real o en aplicaciones, a menudo se necesita no solo el valor máximo, sino también la información de otras columnas relacionadas.

En esta sección, explicaremos en detalle los métodos para obtener el registro completo que tiene el valor máximo.

Método 1: Usar una subconsulta

Es posible obtener el registro con el valor máximo de una columna específica utilizando una subconsulta.

Ejemplo: Obtener la información del empleado con el salario más alto

SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

Ejemplo de salida:

employee_idnamesalarydepartment_id
101Tanaka1200001

El mecanismo de esta consulta:

  1. La subconsulta (SELECT MAX(salary) FROM employees) obtiene el salario más alto.
  2. La consulta externa obtiene el registro completo con ese salario más alto.

Método 2: Usar JOIN

Usando JOIN, se puede crear una consulta más flexible.

Ejemplo: Obtener la información del empleado con el salario más alto por departamento

SELECT e.*
FROM employees e
JOIN (
    SELECT department_id, MAX(salary) AS max_salary
    FROM employees
    GROUP BY department_id
) subquery
ON e.department_id = subquery.department_id AND e.salary = subquery.max_salary;

Ejemplo de salida:

employee_idnamesalarydepartment_id
101Tanaka1200001
202Suzuki900002

El mecanismo de esta consulta:

  1. La subconsulta calcula el salario más alto por departamento.
  2. La consulta principal obtiene el registro completo del empleado con ese salario máximo.

Método 3: Usar funciones de ventana (MySQL 8.0 o posterior)

En MySQL 8.0 o posterior, usando funciones de ventana, se puede obtener el registro del valor máximo de manera más concisa y eficiente.

Ejemplo: Obtener el empleado con el salario más alto por departamento

SELECT employee_id, name, salary, department_id
FROM (
    SELECT *,
           RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
    FROM employees
) ranked
WHERE rnk = 1;

Ejemplo de salida:

employee_idnamesalarydepartment_id
101Tanaka1200001
202Suzuki900002

El mecanismo de esta consulta:

  1. La función RANK() asigna rangos por salario descendente dentro de cada departamento.
  2. La consulta externa extrae los registros con rango 1 (registros con valor máximo).

Notas importantes

  1. Si hay múltiples registros con el valor máximo
  • Si el valor máximo se duplica en múltiples registros, todos los registros correspondientes se obtendrán con cualquiera de los métodos. Ejemplo:
   SELECT *
   FROM employees
   WHERE salary = (SELECT MAX(salary) FROM employees);

Ejemplo de salida:

employee_idnamesalarydepartment_id
101Tanaka1200001
102Sato1200001
  1. Optimización de rendimiento
  • Usar subconsultas o JOIN en conjuntos de datos grandes puede degradar el rendimiento.
  • Configurar índices apropiadamente puede mejorar la velocidad de ejecución de la consulta.

Ejemplos de aplicación en la práctica

  1. Obtener el producto con el precio más alto en la tabla de productos
   SELECT *
   FROM products
   WHERE price = (SELECT MAX(price) FROM products);
  1. Obtener los detalles del costo máximo por proyecto
   SELECT p.*
   FROM projects p
   JOIN (
       SELECT project_id, MAX(cost) AS max_cost
       FROM project_costs
       GROUP BY project_id
   ) subquery
   ON p.project_id = subquery.project_id AND p.cost = subquery.max_cost;

6. Precauciones al usar la función MAX

MySQLMAX es una función de agregación muy conveniente, pero al usarla hay varios puntos a tener en cuenta. Al entender las características de los datos, el rendimiento y el manejo de valores NULL, se puede prevenir resultados erróneos o degradación del rendimiento. En esta sección, se explican en detalle los puntos a los que prestar atención al usar la función MAX.

Manejo de valores NULL

En MySQL, los valores NULL se tratan como «valores desconocidos». Por lo tanto, al usar la función MAX, los valores NULL se ignoran.

Ejemplo: Obtener el valor máximo de datos que incluyen NULL

SELECT MAX(salary) FROM employees;

Datos:

employee_idnamesalary
1Tanaka50000
2SatoNULL
3Suzuki60000

Salida:

MAX(salary)
60000

Puntos:

  • Aunque la columna salary contenga valores NULL, la función MAX ignora los valores NULL en el cálculo.
  • Es necesario ser consciente del procesamiento preciso cuando hay valores NULL.

Caso en que existen múltiples valores máximos

La función MAX devuelve un único valor máximo, pero puede haber múltiples registros en el conjunto de datos con el mismo valor máximo. En este caso, para obtener todos los registros con el valor máximo, se debe ingeniar la consulta de la siguiente manera.

Ejemplo: Obtener empleados con múltiples valores máximos

SELECT * 
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

Datos:

employee_idnamesalary
1Tanaka60000
2Sato60000
3Suzuki50000

Salida:

employee_idnamesalary
1Tanaka60000
2Sato60000

Puntos:

  • Dado que la función MAX sola no puede manejarlo en algunos casos, es necesario usar una subconsulta para obtener todos los registros.

Impacto en el rendimiento

La función MAX funciona rápidamente en consultas simples, pero al manejar grandes cantidades de datos o consultas complejas, el rendimiento puede degradarse.

Consejos para mejorar el rendimiento

  1. Uso de índices
    Al establecer un índice en la columna usada por la función MAX, se puede mejorar significativamente la velocidad de la consulta.
   CREATE INDEX idx_salary ON employees(salary);
  1. Eliminación de datos innecesarios
    Al usar la cláusula WHERE para filtrar los datos objetivo, se reduce la cantidad de datos procesados.
   SELECT MAX(salary)
   FROM employees
   WHERE department_id = 1;
  1. Cálculo dividido
    Considerar el método de calcular el máximo en múltiples subconjuntos y luego obtener el máximo final.

Otras consideraciones

  1. Influencia del tipo de datos
    La función MAX se comporta diferente según el tipo de datos de la columna.
  • Números: Comparación simple de mayor/menor.
  • Cadenas: Comparación en orden lexicográfico.
  • Fechas: Devuelve el valor más reciente en el tiempo. Ejemplo:
   SELECT MAX(last_name) FROM employees;

En este caso, se devuelve el valor máximo en orden lexicográfico de las cadenas.

  1. Datos faltantes distintos de NULL
    Si hay datos faltantes, el resultado del cálculo puede no ser el esperado. Es necesario limpiar los datos.
  2. Combinación con otras funciones de agregación
    Al combinar la función MAX con otras funciones de agregación (SUM, AVG, etc.), es necesario prestar atención para interpretar correctamente los resultados.

7. FAQ: Preguntas frecuentes

En cuanto a la función MAX de MySQL, recopilamos y explicamos las dudas que muchas personas tienen. Esta sección de preguntas frecuentes cubre desde preguntas básicas hasta contenidos avanzados.

Q1: ¿Se puede usar la función MAX simultáneamente en múltiples columnas?

A1: No, la función MAX se usa en una sola columna. Si desea obtener el valor máximo de múltiples columnas, debe aplicar la función MAX individualmente a cada columna.

Ejemplo: Obtener individualmente los valores máximos de múltiples columnas

SELECT MAX(salary) AS max_salary, MAX(bonus) AS max_bonus
FROM employees;

Q2: ¿Cómo es el resultado de la función MAX en una columna de cadenas?

A2: Cuando se aplica la función MAX a una columna de cadenas, se devuelve el valor máximo en orden lexicográfico.

Ejemplo: Obtener el valor máximo de una cadena

SELECT MAX(last_name) FROM employees;

Puntos clave:

  • En orden lexicográfico, «Z» viene después de «A», y los números y símbolos también se evalúan.
  • Si se incluyen caracteres especiales, el resultado puede no seguir el orden esperado.

Q3: ¿Cuál es la diferencia entre la función MAX y la cláusula ORDER BY?

A3: La función MAX y la cláusula ORDER BY se usan a menudo con propósitos similares, pero su comportamiento es diferente.

  • Función MAX: Obtiene directamente el valor máximo de la columna especificada.
  • Cláusula ORDER BY: Ordena los datos por la columna especificada y, si es necesario, obtiene el primer o último valor.

Ejemplo: Obtener el valor máximo con la cláusula ORDER BY

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 1;

Puntos clave:

  • La función MAX suele tener un mejor rendimiento.
  • La cláusula ORDER BY es útil cuando se desea obtener el registro con el valor máximo junto con otra información.

Q4: ¿La función MAX funciona correctamente si hay valores NULL?

A4: Sí, la función MAX ignora los valores NULL. Por lo tanto, la presencia de valores NULL no afecta el cálculo del valor máximo.

Ejemplo: Comportamiento con valores NULL

SELECT MAX(salary) FROM employees;

Datos:

employee_idnamesalary
1Tanaka60000
2SatoNULL
3Suzuki50000

Resultado:

MAX(salary)
60000

Notas: Si desea incluir los valores NULL en el procesamiento, use la función IFNULL para reemplazar NULL por un valor predeterminado.

SELECT MAX(IFNULL(salary, 0)) FROM employees;

Q5: ¿Hay formas de mejorar el rendimiento al usar la función MAX?

A5: Considere los siguientes métodos:

  1. Configuración de índices: Si configura un índice en la columna que usa la función MAX, la velocidad de la consulta mejorará significativamente.
   CREATE INDEX idx_salary ON employees(salary);
  1. Filtrado de datos objetivo: Use una cláusula WHERE para especificar condiciones y reducir los datos objetivo.
   SELECT MAX(salary) FROM employees WHERE department_id = 1;
  1. Optimización de consultas: Elimine cálculos innecesarios y mantenga una estructura de consulta simple.

Q6: ¿Qué resultado se obtiene al combinar la función MAX con la cláusula GROUP BY?

A6: Al combinar la cláusula GROUP BY con la función MAX, se puede obtener el valor máximo por grupo.

Ejemplo: Obtener el salario más alto por departamento

SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;

Resultado:

department_idMAX(salary)
1120000
290000

Q7: Si hay múltiples registros con el valor máximo, ¿cómo se pueden obtener todos?

A7: Se pueden obtener los múltiples registros con el valor máximo usando subconsultas o JOIN.

Ejemplo: Obtener todos los registros con el valor máximo

SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

Q8: ¿Se puede usar la función MAX junto con funciones de ventana?

A8: Sí, a partir de MySQL 8.0, se pueden combinar con funciones de ventana para consultas más flexibles.

Ejemplo: Obtener los empleados con el salario más alto por departamento

SELECT employee_id, name, salary, department_id
FROM (
    SELECT *,
           RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
    FROM employees
) ranked
WHERE rnk = 1;

8. Resumen

La función MAX de MySQL es una herramienta muy poderosa en las operaciones de base de datos y el análisis de datos. En este artículo, hemos explicado de manera exhaustiva desde el uso básico de la función MAX hasta el uso condicional, la agrupación, la obtención de registros con el valor máximo y la optimización de rendimiento.

Puntos principales

  1. Uso básico de la función MAX
    La función MAX se utiliza para obtener el valor máximo de la columna especificada. Es compatible con varios tipos de datos, como números, cadenas y fechas.
  2. Obtención de valores máximos condicionales
    Al usar la cláusula WHERE, se puede obtener el valor máximo que coincide con condiciones específicas. Es útil para encontrar valores máximos por proyecto o departamento.
  3. Obtención de valores máximos por grupo
    También explicamos en detalle cómo obtener el valor máximo de cada grupo usando la cláusula GROUP BY. Se puede utilizar para salarios por departamento o ventas mensuales, etc.
  4. Obtención de todo el registro con el valor máximo
    Aprendimos métodos eficientes para obtener todo el registro que tiene el valor máximo usando subconsultas, JOIN o funciones de ventana.
  5. Puntos a tener en cuenta al usar la función MAX
    Es importante considerar el manejo de valores NULL y los casos donde hay múltiples valores máximos, así como el impacto en el rendimiento.
  6. FAQ
    Como preguntas frecuentes, proporcionamos métodos para usar la función MAX en múltiples columnas y consejos para la optimización de rendimiento.

Finalmente

Al utilizar adecuadamente la función MAX, el análisis de datos y la creación de informes se vuelven más eficientes. Continúe aprendiendo SQL y practique para poder crear consultas más avanzadas.

Esperamos que este artículo le ayude a profundizar su comprensión de las operaciones y análisis de datos usando MySQL.