0Pricing
Coding Interview Prep · Aula

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

  1. COUNT(*) versus COUNT(coluna) versus COUNT(DISTINCT)
  2. SUM e AVG com NULLs
  3. MIN, MAX e agregação não numérica
  4. Agregações sem GROUP BY
← Voltar para Coding Interview Prep