- 1 1. Introdução
- 2 2. Uso Básico da Função MAX
- 3 3. Recuperando o Valor Máximo com Condições
- 4 4. Como Recuperar o Valor Máximo para Cada Grupo
- 5 5. Como Recuperar o Registro Completo com o Valor Máximo
- 6 6. Considerações Importantes ao Usar a Função MAX
- 7 7. FAQ: Perguntas Frequentes
- 7.1 Q1: A função MAX pode ser usada em múltiplas colunas ao mesmo tempo?
- 7.2 Q2: O que acontece quando a função MAX é aplicada a uma coluna de string?
- 7.3 Q3: Qual é a diferença entre a função MAX e a cláusula ORDER BY?
- 7.4 Q4: A função MAX funciona corretamente quando valores NULL são incluídos?
- 7.5 Q5: Como posso melhorar o desempenho ao usar a função MAX?
- 7.6 Q6: O que acontece ao combinar MAX com a cláusula GROUP BY?
- 7.7 Q7: Se vários registros compartilham o valor máximo, como posso recuperar todos eles?
- 7.8 Q8: A função MAX pode ser usada junto com funções de janela?
- 8 8. Resumo
1. Introdução
O MySQL é um sistema de gerenciamento de banco de dados amplamente utilizado em todo o mundo. Entre suas muitas funcionalidades, a função MAX é uma função de agregação importante frequentemente usada em análise de dados e geração de relatórios. Ao usar esta função, você pode facilmente recuperar o valor máximo de uma coluna especificada.
Este artigo explica claramente tudo, desde o uso básico da função MAX do MySQL até exemplos avançados e considerações importantes. Ele é projetado para ser útil tanto para iniciantes quanto para usuários intermediários, então certifique-se de usá-lo como referência.
2. Uso Básico da Função MAX
A função MAX pode ser usada com vários tipos de dados, incluindo valores numéricos, datas e strings. Nesta seção, explicaremos o uso básico em detalhes.
Sintaxe da Função MAX
Abaixo está a sintaxe básica da função MAX.
SELECT MAX(column_name) FROM table_name;
Usando esta sintaxe, você pode recuperar o valor máximo da coluna especificada.
Exemplo: Usando MAX com uma Coluna Numérica
O exemplo a seguir recupera o salário mais alto da tabela de funcionários.
SELECT MAX(salary) FROM employees;
Exemplo de Saída:
| MAX(salary) |
|---|
| 120000 |
Este resultado indica que o valor máximo na coluna salary é 120000.
Exemplo: Usando MAX com uma Coluna de Data
Para recuperar a data de contratação mais recente dos funcionários, use a consulta a seguir:
SELECT MAX(hire_date) FROM employees;
Exemplo de Saída:
| MAX(hire_date) |
|---|
| 2025-01-01 |
Este resultado mostra que a data de contratação mais recente é 2025-01-01.
Exemplo: Usando MAX com uma Coluna de String
A função MAX também pode ser usada com colunas de string. Para strings, ela retorna o valor que aparece por último na ordem lexicográfica (de dicionário).
SELECT MAX(last_name) FROM employees;
Exemplo de Saída:
| MAX(last_name) |
|---|
| Yamamoto |
Este resultado indica que Yamamoto é o nome que aparece por último na ordem alfabética (lexicográfica).
3. Recuperando o Valor Máximo com Condições
A função MAX também pode ser usada com condições. Nesta seção, explicamos como recuperar um valor máximo sob condições específicas.
Combinando com a Cláusula WHERE
Para recuperar o valor máximo com condições específicas, use a cláusula WHERE.
Exemplo: Recuperar o salário mais alto entre os funcionários cujo ID do departamento é 10
SELECT MAX(salary) FROM employees WHERE department_id = 10;
Exemplo de Saída:
| MAX(salary) |
|---|
| 90000 |
Esta consulta recupera o salário máximo entre os funcionários cujo ID do departamento é 10.
Exemplo Prático de Negócios
Você pode usar a mesma sintaxe para recuperar o custo máximo relacionado a um projeto específico.
SELECT MAX(cost) FROM projects WHERE project_status = 'active';
Esta consulta recupera o custo máximo entre projetos com status active.
4. Como Recuperar o Valor Máximo para Cada Grupo
Ao usar a cláusula GROUP BY do MySQL, você pode recuperar o valor máximo para cada grupo. Por exemplo, isso é muito útil ao analisar dados por agrupamento, como o salário mais alto por departamento ou as vendas máximas por mês. Nesta seção, explicamos como recuperar valores máximos por grupo em detalhes.
Sintaxe Básica
Para recuperar o valor máximo para cada grupo, escreva a consulta da seguinte forma:
SELECT grouping_column, MAX(target_column)
FROM table_name
GROUP BY grouping_column;
Com esta sintaxe, o MySQL agrupa os dados com base na coluna especificada e retorna o valor máximo dentro de cada grupo.
Exemplo: Recuperar o Salário Mais Alto por Departamento
A consulta a seguir recupera o salário mais alto por departamento da tabela de funcionários.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;
Exemplo de Saída:
| department_id | MAX(salary) |
|---|---|
| 1 | 120000 |
| 2 | 90000 |
| 3 | 80000 |
Este resultado mostra o salário máximo (MAX(salary)) para cada departamento (department_id).
Exemplo: Recuperar as Vendas Máximas por Mês
Para obter o valor máximo de vendas de cada mês a partir de uma tabela de vendas, escreva a consulta da seguinte forma:
SELECT DATE_FORMAT(sale_date, '%Y-%m') AS sale_month, MAX(amount)
FROM sales
GROUP BY sale_month;
Exemplo de Saída:
| sale_month | MAX(amount) |
|---|---|
| 2025-01 | 50000 |
| 2025-02 | 70000 |
| 2025-03 | 60000 |
Nesta consulta, a coluna sale_date é formatada para ano‑mês (%Y-%m), e o valor máximo de vendas é recuperado para cada mês.
Notas Importantes ao Usar GROUP BY
- Restrições nas Colunas Incluídas na DECLARAÇÃO SELECT Ao usar a cláusula
GROUP BY, as colunas incluídas na instruçãoSELECTdevem ser uma das seguintes:
- Colunas especificadas na cláusula
GROUP BY - Funções de agregação (por exemplo, MAX, SUM, COUNT, etc.) Exemplo: A consulta a seguir resultará em erro.
SELECT department_id, salary FROM employees GROUP BY department_id;
Motivo: salary não está incluído em uma função de agregação nem na cláusula GROUP BY.
- Tratamento de Valores NULL Se a coluna de agrupamento contiver valores NULL, esses valores NULL são tratados como um grupo separado. Exemplo: Registros com um ID de departamento NULL também são calculados como um único grupo.
- Otimização de Desempenho Ao agrupar grandes volumes de dados, o uso de índices pode melhorar o desempenho da consulta. Adicione índices conforme necessário.
5. Como Recuperar o Registro Completo com o Valor Máximo
Usar a função MAX do MySQL permite recuperar o valor máximo de uma coluna específica. Contudo, ela não retorna automaticamente o registro completo que contém esse valor máximo. Em análises de dados e aplicações reais, costuma‑se precisar não apenas do valor máximo, mas também de informações relacionadas de outras colunas.
Nesta seção, explicamos detalhadamente como recuperar o registro completo que contém o valor máximo.
Método 1: Usando uma Subconsulta
É possível usar uma subconsulta para obter os registros que contêm o valor máximo em uma coluna específica.
Exemplo: Recuperar Informações do Funcionário com o Salário Mais Alto
SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
Exemplo de Saída:
| employee_id | name | salary | department_id |
|---|---|---|---|
| 101 | Tanaka | 120000 | 1 |
Como essa consulta funciona:
- A subconsulta
(SELECT MAX(salary) FROM employees)obtém o salário mais alto. - A consulta externa recupera o registro completo que corresponde a esse salário mais alto.
Método 2: Usando JOIN
Usar JOIN permite criar consultas mais flexíveis.
Exemplo: Recuperar Funcionários com o Salário Mais 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;
Exemplo de Saída:
| employee_id | name | salary | department_id |
|---|---|---|---|
| 101 | Tanaka | 120000 | 1 |
| 202 | Suzuki | 90000 | 2 |
Como essa consulta funciona:
- A subconsulta calcula o salário mais alto para cada departamento.
- A consulta principal recupera os registros completos dos funcionários que correspondem a esses salários máximos.
Método 3: Usando Funções de Janela (MySQL 8.0+)
No MySQL 8.0 e versões posteriores, é possível usar funções de janela para obter registros com o valor máximo de forma mais concisa e eficiente.
Exemplo: Recuperar Funcionários com o Salário Mais 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;
Exemplo de Saída:
| employee_id | name | salary | department_id |
|---|---|---|---|
| 101 | Tanaka | 120000 | 1 |
| 202 | Suzuki | 90000 | 2 |
Como essa consulta funciona:
- A função
RANK()classifica os salários dentro de cada departamento em ordem decrescente. - A consulta externa extrai os registros onde a classificação é 1 (registros com o valor máximo).
Notas Importantes
- Se Vários Registros Compartilharem o Valor Máximo
- Se vários registros compartilharem o mesmo valor máximo, todos os registros correspondentes serão retornados por qualquer um dos métodos. Exemplo:
SELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);
Exemplo de Saída:
| employee_id | name | salary | department_id |
|---|---|---|---|
| 101 | Tanaka | 120000 | 1 |
| 102 | Sato | 120000 | 1 |
- Otimização de Desempenho
- Usar subconsultas ou JOINs em grandes conjuntos de dados pode reduzir o desempenho.
- Indexação adequada pode melhorar significativamente a velocidade de execução da consulta.
Exemplos Práticos de Negócios
- Recuperar o Produto com o Maior Preço
SELECT * FROM products WHERE price = (SELECT MAX(price) FROM products);
- Recuperar Informações Detalhadas do Custo Máximo por Projeto
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. Considerações Importantes ao Usar a Função MAX
A função MAX do MySQL é uma função agregada muito útil, mas há vários pontos importantes a serem lembrados ao usá‑la. Compreender as características dos dados, as implicações de desempenho e como os valores NULL são tratados ajuda a evitar resultados incorretos e degradação de desempenho. Nesta seção, explicamos as considerações principais ao usar a função MAX.
Tratamento de Valores NULL
No MySQL, os valores NULL são tratados como “valores desconhecidos”. Portanto, ao usar a função MAX, os valores NULL são ignorados.
Exemplo: Recuperando o Valor Máximo de Dados que Incluem NULL
SELECT MAX(salary) FROM employees;
Dados:
| employee_id | name | salary |
|---|---|---|
| 1 | Tanaka | 50000 |
| 2 | Sato | NULL |
| 3 | Suzuki | 60000 |
Saída:
| MAX(salary) |
|---|
| 60000 |
Pontos Principais:
- Mesmo que a coluna
salarycontenha valores NULL, a função MAX os ignora durante o cálculo. - Você deve considerar cuidadosamente como os valores NULL afetam a lógica dos seus dados.
Quando Existem Múltiplos Valores Máximos
A função MAX retorna um único valor máximo, mas vários registros podem compartilhar esse mesmo valor máximo no conjunto de dados. Nesses casos, é necessário estruturar a consulta para recuperar todos os registros correspondentes.
Exemplo: Recuperar Funcionários com o Mesmo Salário Máximo
SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
Dados:
| employee_id | name | salary |
|---|---|---|
| 1 | Tanaka | 60000 |
| 2 | Sato | 60000 |
| 3 | Suzuki | 50000 |
Saída:
| employee_id | name | salary |
|---|---|---|
| 1 | Tanaka | 60000 |
| 2 | Sato | 60000 |
Ponto Principal:
- Se o MAX sozinho não for suficiente, use uma subconsulta para recuperar todos os registros correspondentes.
Impacto no Desempenho
A função MAX funciona de forma eficiente em consultas simples. No entanto, o desempenho pode degradar ao trabalhar com grandes conjuntos de dados ou consultas complexas.
Dicas para Melhorar o Desempenho
- Usar Índices Adicionar um índice à coluna usada na função MAX pode melhorar significativamente a velocidade da consulta.
CREATE INDEX idx_salary ON employees(salary);
- Filtrar Dados Desnecessários Reduza o conjunto de dados usando uma cláusula WHERE para limitar as linhas‑alvo.
SELECT MAX(salary) FROM employees WHERE department_id = 1;
- Dividir e Calcular Considere calcular valores máximos em subconjuntos e depois determinar o máximo final.
Outras Considerações
- Impacto dos Tipos de Dados O comportamento da função MAX depende do tipo de dado da coluna.
* Numérico: Comparação numérica simples.
* String: Comparado em ordem lexicográfica.
* Data: Retorna a data mais recente (mais nova). Exemplo:SELECT MAX(last_name) FROM employees;
Neste caso, o valor máximo é determinado com base na ordem lexicográfica de strings.
Dados Ausentes Diferentes de NULL Se os dados estiverem incompletos ou formatados incorretamente, o resultado do cálculo pode não corresponder às expectativas. A limpeza de dados pode ser necessária.
Combinação com Outras Funções Agregadas Ao combinar o MAX com outras funções agregadas (como SUM ou AVG), certifique‑se de interpretar corretamente os resultados.
7. FAQ: Perguntas Frequentes
Esta seção resume e explica perguntas comuns sobre a função MAX do MySQL. Ela cobre tópicos tanto básicos quanto avançados.
Q1: A função MAX pode ser usada em múltiplas colunas ao mesmo tempo?
A1: Não, a função MAX opera em uma única coluna. Se você quiser recuperar os valores máximos de várias colunas, deve aplicar a função MAX a cada coluna individualmente.
Exemplo: Recuperar Valores Máximos de Múltiplas Colunas
SELECT MAX(salary) AS max_salary, MAX(bonus) AS max_bonus
FROM employees;
Q2: O que acontece quando a função MAX é aplicada a uma coluna de string?
A2: Quando aplicada a uma coluna de string, a função MAX retorna o valor que está por último na ordem lexicográfica (de dicionário).
Exemplo: Recuperar o Valor Máximo de String
SELECT MAX(last_name) FROM employees;
Pontos-chave:
- Na ordem lexicográfica, “Z” vem depois de “A”, e números e símbolos também são avaliados.
- Se caracteres especiais forem incluídos, o resultado pode não corresponder à ordem esperada.
Q3: Qual é a diferença entre a função MAX e a cláusula ORDER BY?
A3: Embora a função MAX e a cláusula ORDER BY possam parecer servir a propósitos semelhantes, elas se comportam de maneira diferente.
- Função MAX: Recupera diretamente o valor máximo da coluna especificada.
- Cláusula ORDER BY: Ordena os dados com base na coluna especificada e permite recuperar o primeiro ou último valor conforme necessário.
Exemplo: Recuperar o Valor Máximo Usando ORDER BY
SELECT * FROM employees
ORDER BY salary DESC
LIMIT 1;
Pontos-chave:
- A função MAX costuma ser mais eficiente em termos de desempenho.
- A cláusula ORDER BY é útil quando você precisa de informações adicionais junto ao registro que contém o valor máximo.
Q4: A função MAX funciona corretamente quando valores NULL são incluídos?
A4: Sim, a função MAX ignora valores NULL. Portanto, valores NULL não afetam o cálculo do valor máximo.
Exemplo: Comportamento Quando Valores NULL São Incluídos
SELECT MAX(salary) FROM employees;
Dados:
| employee_id | name | salary |
|---|---|---|
| 1 | Tanaka | 60000 |
| 2 | Sato | NULL |
| 3 | Suzuki | 50000 |
Resultado:
| MAX(salary) |
|---|
| 60000 |
Nota importante:
Se você quiser incluir valores NULL no processamento, use a função IFNULL para substituir NULL por um valor padrão.
SELECT MAX(IFNULL(salary, 0)) FROM employees;
Q5: Como posso melhorar o desempenho ao usar a função MAX?
A5: Considere as seguintes abordagens:
- Adicionar índices: Adicionar um índice à coluna usada na função MAX pode melhorar significativamente o desempenho da consulta.
CREATE INDEX idx_salary ON employees(salary);
- Filtrar dados alvo: Use uma cláusula WHERE para reduzir o número de linhas processadas.
SELECT MAX(salary) FROM employees WHERE department_id = 1;
- Otimizar consultas: Elimine cálculos desnecessários e mantenha a estrutura da consulta simples.
Q6: O que acontece ao combinar MAX com a cláusula GROUP BY?
A6: Ao combinar GROUP BY com a função MAX, você pode recuperar o valor máximo para cada grupo.
Exemplo: Recuperar o Salário Mais Alto por Departamento
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id;
Resultado:
| department_id | MAX(salary) |
|---|---|
| 1 | 120000 |
| 2 | 90000 |
Q7: Se vários registros compartilham o valor máximo, como posso recuperar todos eles?
A7: Use uma subconsulta ou JOIN para recuperar todos os registros que compartilham o valor máximo.
Exemplo: Recuperar Todos os Registros com o Valor Máximo
SELECT *
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
Q8: A função MAX pode ser usada junto com funções de janela?
A8: Sim, no MySQL 8.0 e posteriores, você pode combinar MAX com funções de janela para consultas mais flexíveis.
Exemplo: Recuperar Funcionários com o Salário Mais 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. Resumo
A função MAX do MySQL é uma ferramenta poderosa para operações de banco de dados e análise de dados. Neste artigo, cobrimos de forma abrangente tudo, desde o uso básico da função MAX até consultas condicionais, agrupamento, recuperação de registros completos com valores máximos e otimização de desempenho.
Principais Conclusões
Uso Básico da Função MAX
A função MAX é usada para obter o valor máximo de uma coluna especificada. Ela suporta vários tipos de dados, incluindo números, strings e datas.Recuperação Condicional do Máximo
Usando a cláusulaWHERE, você pode recuperar valores máximos que correspondam a condições específicas. Isso é útil para análises por projeto ou por departamento.Recuperando Valores Máximos por Grupo
Explicamos como usar a cláusulaGROUP BYpara recuperar valores máximos para cada grupo, como salários por departamento ou vendas por mês.Recuperando Registros Inteiros com o Valor Máximo
Você aprendeu como recuperar de forma eficiente registros completos contendo valores máximos usando subconsultas, JOINs e funções de janela.Considerações Importantes ao Usar MAX
É importante considerar o tratamento de NULL, múltiplos valores máximos e o impacto de desempenho.Perguntas Frequentes
Abordamos perguntas comuns, incluindo como usar MAX com múltiplas colunas e dicas para otimização de desempenho.
Considerações Finais
Ao utilizar corretamente a função MAX, a análise de dados e a geração de relatórios se tornam muito mais eficientes. Continue praticando SQL para criar consultas mais avançadas.
Esperamos que este artigo ajude a aprofundar sua compreensão sobre manipulação e análise de dados usando MySQL.


