MIN, MAX e agregação não numérica
Agregue datas e textos e entenda o significado de MIN aplicado a texto.
MIN, MAX e agregação não numérica é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
MIN e MAX além dos números
Os candidatos presumem que MIN e MAX funcionam apenas com números. Os entrevistadores adoram perguntar: "O que MAX(name) retorna? E MIN(order_date)?"
A verdade é que MIN e MAX funcionam com qualquer tipo que possa ser ordenado — números, datas e strings. Compreender as regras de ordenação de cada tipo é a verdadeira habilidade que está sendo avaliada.
O caso numérico
Comece pelo conhecido. Em colunas numéricas, MIN retorna o menor valor e MAX, o maior. Simples.
Assim como as outras funções de agregação, MIN e MAX ignoram NULLs. Um NULL nunca é o valor mínimo ou máximo; ele simplesmente é ignorado. Se todos os valores forem NULL, ambos retornarão NULL.
SELECT MIN(salary) AS lowest, MAX(salary) AS highest
FROM employees;MIN e MAX com datas
As datas e os carimbos de data e hora podem ser totalmente ordenados, portanto MIN(order_date) fornece a data mais antiga e MAX(order_date), a mais recente.
É assim que se responde a "quando o primeiro pedido foi feito?" (MIN) e "qual é a atividade mais recente?" (MAX) sem ordenar nem limitar. Essa é a solução idiomática baseada em conjuntos.
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS latest_order
FROM orders;Intervalo de datas em uma consulta
Uma pergunta complementar comum é: "Há quanto tempo este cliente está ativo?" Combine MIN e MAX e, em seguida, faça a subtração.
Isso calcula o intervalo entre o primeiro e o último pedido. A sintaxe exata da subtração varia conforme o dialeto, mas a ideia de MIN/MAX é universal e mostra que é possível expressar intervalos de forma declarativa.
SELECT
customer_id,
MIN(order_date) AS first_order,
MAX(order_date) AS last_order,
MAX(order_date) - MIN(order_date) AS active_days
FROM orders
GROUP BY customer_id;MIN e MAX com textos
Esta é a parte que surpreende as pessoas. Em colunas de texto, MIN e MAX usam a ordenação lexicográfica (alfabética) com base na colação da coluna.
Assim, MIN(name) retorna o nome que aparece primeiro em ordem alfabética, e MAX(name), o que aparece por último. MIN sobre {'Carol', 'Alice', 'Bob'} retorna 'Alice'; MAX retorna 'Carol'.
SELECT MIN(name) AS first_alpha, MAX(name) AS last_alpha
FROM employees;
-- with Alice, Bob, Carol: 'Alice' and 'Carol'Colação e distinção entre maiúsculas e minúsculas
A ordenação de textos depende da colação, que controla a distinção entre maiúsculas e minúsculas e as regras de localidade. Em muitas colações padrão, as letras maiúsculas podem ser ordenadas antes das minúsculas, portanto MAX de {'apple', 'Banana'} pode surpreender.
Em uma entrevista, mencione que os resultados de MIN/MAX para textos dependem da colação. Essa nuance diferencia uma resposta decorada de uma compreensão genuína.
O que MIN(text) NÃO significa
Um equívoco frequente é pensar que MIN(name) retorna a cadeia de caracteres mais curta ou que MAX(name) retorna a mais longa. Isso não acontece. A operação trata exclusivamente da ordem de classificação, não do comprimento.
Se realmente precisar da cadeia de caracteres mais longa, ordene por LENGTH(name) e escolha a primeira linha, ou use MAX(LENGTH(name)) para obter apenas o comprimento. Não confunda a ordenação dos valores com o comprimento.
SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;MIN/MAX não combinam colunas
Armadilha importante: MIN e MAX operam independentemente sobre uma única coluna. Elas não retornam a linha inteira que contém o valor mínimo ou máximo.
Se escrever SELECT MIN(salary), name sem agrupamento, não obterá o nome da pessoa com menor salário — obterá um erro ou um nome arbitrário, dependendo do dialeto. Para buscar a linha inteira, use ORDER BY + LIMIT ou uma função de janela.
-- Wrong assumption: this does NOT give the lowest earner's name.
-- Correct approach to get the whole row:
SELECT name, salary
FROM employees
ORDER BY salary ASC
LIMIT 1;Revisão do comportamento de NULL em MIN/MAX
Assim como SUM e AVG, MIN e MAX ignoram NULLs. Um NULL não é o menor nem o maior valor.
- Valores misturados + NULLs: os NULLs são ignorados e o mínimo/máximo real é retornado.
- Todos os valores são NULL ou não há linhas: MIN e MAX retornam NULL.
Essa consistência entre as funções de agregação é um ponto claro para mencionar: "Todas as funções de agregação padrão ignoram NULLs."
Colocando isso em um grupo
MIN e MAX são especialmente úteis com GROUP BY para encontrar extremos por grupo. "Maior salário por departamento" é um exemplo clássico.
Isso retorna uma linha por departamento com o maior salário daquele departamento. Lembre-se: o resultado fornece o valor, não o funcionário. Associar o nome a ele é um problema separado (e comum) que vem em seguida.
SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;Como responder com confiança
Uma resposta forte em uma entrevista seria: "MIN e MAX funcionam com qualquer tipo ordenável. Para números, representam o menor e o maior; para datas, a mais antiga e a mais recente; para textos, seguem a ordem alfabética definida pela colação da coluna. Elas ignoram NULLs e retornam NULL somente quando não existe nenhum valor não NULL. Retornam um único valor, não a linha inteira; portanto, para buscar a linha, eu usaria ORDER BY com LIMIT ou uma função de janela."
Verificação rápida
Raciocine sobre a agregação de textos.
Recapitulação
Tudo sobre MIN e MAX:
- Funcionam com qualquer tipo ordenável: números, datas e textos.
- Os textos usam a ordem alfabética/da colação, não o comprimento.
- Datas: MIN = mais antiga, MAX = mais recente.
- Elas ignoram NULLs; quando todos os valores são NULL ou não há linhas, retornam NULL.
- Retornam um valor, não a linha inteira — para isso, use ORDER BY + LIMIT.
A seguir: o que acontece quando se usam funções de agregação sem um GROUP BY.
Perguntas Frequentes
A aula “MIN, MAX e agregação não numérica” é grátis?
Sim — o texto completo de “MIN, MAX e agregação não numérica” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “MIN, MAX e agregação não numérica”?
Agregue datas e textos e entenda o significado de MIN aplicado a texto. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “MIN, MAX e agregação não numérica”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- COUNT(*) versus COUNT(coluna) versus COUNT(DISTINCT)
- SUM e AVG com NULLs
- MIN, MAX e agregação não numérica
- Agregações sem GROUP BY