Bora mergulhar no mundo dos extremos dos dados — procurando os valores mínimos e máximos. Relaxa, SQL não vai te obrigar a aprender nada super novo, mas a gente vai sacar como achar os maiores e menores valores nas tabelas. Essas funções estão em todo lugar: desde analisar notas de filmes no IMDb até calcular a menor temperatura em Marte.
MIN() e MAX() são funções agregadas que retornam o menor e o maior valor de um conjunto de dados. Elas funcionam tipo caçadores de extremos: MIN() acha o menor elemento, e MAX() — o maior. E não é só pra número não: dá pra buscar a menor e a maior string ou data também.
-- Forma geral das funções MIN e MAX
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
Fácil demais! Agora bora ver como essa mágica funciona em vários cenários.
Sintaxe e exemplos básicos
Dados numéricos
Imagina que a gente tem uma tabela employees, com uma coluna de salários dos funcionários (salary).
Queremos saber o menor e o maior salário.
Tabela employees
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- Exemplo para dados numéricos
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
Resultado
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Dados de texto
Você pode usar MIN() e MAX() com dados de texto também.
Elas comparam em ordem alfabética (sim, até letras podem ser "as menores" e "as maiores").
Imagina que temos uma tabela students, onde a coluna name guarda os nomes dos estudantes.
Tabela students
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- Exemplo para dados 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 |
Datas e horários
Vamos buscar a data mais antiga e a mais recente da tabela events.
Tabela 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 |
-- Exemplo para trabalhar com datas
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 |
Usando MIN() e MAX() em tabelas com valor NULL
Se a coluna tem valores NULL, pode ficar tranquilo: SQL ignora eles nos cálculos.
Ou seja, MIN() e MAX() só vão considerar os valores "normais".
Tabela employees_with_null
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- Tabela com NULL
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
Se a coluna salary tem registros com NULL, eles são simplesmente ignorados.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Mas se TODA a coluna for NULL, o resultado vai ser NULL.
Exemplos de uso de MIN() e MAX() em tarefas reais
Descobrindo o funcionário mais velho e o mais novo
Tabela 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 |
Na tabela employees tem o campo birth_date, que guarda as datas de nascimento dos funcionários. Vamos descobrir quem é o mais velho e o mais novo.
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álise de vendas
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
Na tabela sales tem o campo amount, que guarda os valores das vendas. Vamos achar o menor e o maior valor de venda.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
Resultado da consulta
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
Buscando o primeiro e o último pedido
Se você tem uma tabela orders com o campo order_date, dá pra descobrir fácil a primeira e a última data de pedido.
Tabela 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 da consulta:
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
Detalhes do funcionamento do MIN() e MAX()
Comparação de textos: quando trabalha com strings, MIN() e MAX() comparam em ordem alfabética.
Trabalhando com NULL: NULL é ignorado se tiver outros valores na coluna. Mas se tudo for NULL, o resultado é NULL.
Comparação de datas: SQL considera não só o ano, mas também mês, dia, hora, minuto.
GO TO FULL VERSION