Vamos a sumergirnos en el mundo de los extremos en los datos — buscando los valores mínimos y máximos. Tranquilo, SQL no te va a pedir que aprendas algo totalmente nuevo, pero sí vas a aprender a encontrar los valores más grandes y más pequeños en las tablas. Estas funciones se usan en todas partes: desde analizar ratings de pelis en IMDb hasta calcular la temperatura mínima en Marte.
MIN() y MAX() son funciones agregadas que devuelven el valor mínimo y máximo de un conjunto de datos. Funcionan como cazadores buena onda de extremos: MIN() busca el elemento más pequeño y MAX() el más grande. No solo sirven para números: puedes buscar la cadena o la fecha más pequeña o más grande.
-- Forma general de las funciones MIN y MAX
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
¡Fácil y directo! Ahora vamos a ver cómo funciona esta magia en diferentes escenarios.
Sintaxis y ejemplos básicos
Datos numéricos
Supón que tienes una tabla employees con una columna de salarios (salary).
Queremos saber el salario mínimo y máximo.
Tabla employees
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- Ejemplo para datos numéricos
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
Resultado
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Datos de texto
Puedes usar MIN() y MAX() con datos de texto.
Se comparan por orden alfabético (sí, hasta las letras pueden ser "las más pequeñas" o "las más grandes").
Supón que tienes una tabla students donde la columna name guarda los nombres de los estudiantes.
Tabla students
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- Ejemplo para datos de texto
SELECT
MIN(name) AS first_name_in_order,
MAX(name) AS last_name_in_order
FROM students;
Resultado
| first_name_in_order | last_name_in_order |
|---|---|
| Anna | Zoe |
Fechas y tiempo
Buscamos la fecha más temprana y la más tardía de la tabla events.
Tabla events
| id | event_name | event_date |
|---|---|---|
| 1 | New Year Party | 2023-01-01 |
| 2 | Summer Fest | 2023-06-15 |
| 3 | Halloween Bash | 2023-10-31 |
| 4 | Year End Gala | 2023-12-31 |
-- Ejemplo para trabajar con fechas
SELECT
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM events;
Resultado
| earliest_date | latest_date |
|---|---|
| 2023-01-01 | 2023-12-31 |
Uso de MIN() y MAX() en tablas con valores NULL
Si una columna tiene valores NULL, puedes dormir tranquilo: SQL los ignora al calcular.
Eso significa que MIN() y MAX() solo trabajan con los valores "normales".
Tabla employees_with_null
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- Tabla con NULL
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
Si en la columna salary hay registros con NULL, simplemente se ignoran.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Pero si TODA la columna es NULL, el resultado será NULL.
Ejemplos de uso de MIN() y MAX() en tareas reales
Encontrar el empleado más viejo y el más joven
Tabla employees
| id | name | birth_date |
|---|---|---|
| 1 | Otto | 1980-05-10 |
| 2 | Maria | 1990-11-20 |
| 3 | Anna | 1975-03-15 |
| 4 | John | 2000-08-01 |
En la tabla employees hay un campo birth_date que guarda las fechas de nacimiento de los empleados. Vamos a encontrar el más viejo y el más joven.
SELECT
MIN(birth_date) AS oldest_employee,
MAX(birth_date) AS youngest_employee
FROM employees;
Resultado:
| oldest_employee | youngest_employee |
|---|---|
| 1975-03-15 | 2000-08-01 |
Análisis de ventas
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
En la tabla sales hay un campo amount que guarda los importes de las ventas. Vamos a buscar la venta mínima y máxima.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
Resultado de la consulta
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
Buscar los primeros y últimos pedidos
Si tienes una tabla orders con el campo order_date, puedes averiguar fácilmente la primera y la última fecha de pedido.
Tabla original orders
| order_id | customer_id | order_date | amount |
|---|---|---|---|
| 101 | 1 | 2023-01-15 10:23:00 | 250.00 |
| 102 | 2 | 2023-02-10 14:45:00 | 150.00 |
| 103 | 3 | 2023-01-05 09:10:00 | 300.00 |
| 104 | 1 | 2023-03-22 16:30:00 | 500.00 |
| 105 | 4 | 2023-01-25 11:00:00 | 120.00 |
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS last_order
FROM orders;
Resultado de la consulta:
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
Detalles de cómo funcionan MIN() y MAX()
Comparación de textos: cuando trabajas con cadenas, MIN() y MAX() las comparan por orden alfabético.
Trabajo con NULL: NULL se ignora si hay otros valores en la columna. Pero si todos los valores son NULL, el resultado será NULL.
Comparación de fechas: SQL tiene en cuenta no solo el año, sino también el mes, día, horas y minutos.
GO TO FULL VERSION