MySQL Funções de agregação: SOMA, CONTAR, AVG & MÁXIMO

⚡ Resumo Inteligente

Funções agregadas em MySQL Realiza um cálculo em várias linhas de uma única coluna e retorna um valor resumido. As cinco funções padrão ISO — CONTAR, SOMA, AVG, MIN e MAX — são a base de praticamente todos os relatórios gerados por um banco de dados.

  • 🔢 Comportamento COUNT: COUNT(coluna) ignora valores NULL, enquanto COUNT(*) conta todas as linhas da tabela, incluindo duplicados e NULLs.
  • 🚫 Palavra-chave DISTINTA: DISTINCT remove valores duplicados antes da execução do cálculo; ALL é o padrão e os mantém.
  • 📉 MÍN e MÁX: MIN retorna o menor valor em uma coluna e MAX retorna o maior, tanto para tipos numéricos quanto de texto e de data.
  • SOMA e AVG: Ambas operam apenas em colunas numéricas e excluem linhas NULL do resultado retornado.
  • 📊 AGRUPAR POR Emparelhamento: Adicionar GROUP BY transforma um único gráfico de resumo em uma linha de resumo por grupo.
  • ⚠️ Armadilha NULL: AVG A divisão é feita apenas pela contagem de linhas não nulas, portanto, valores ausentes aumentam silenciosamente a média.

O que são funções agregadas em MySQL?

An função agregada Lê várias linhas de uma única coluna e as consolida em um único valor. As funções de agregação servem para:

  • Realizar cálculos em várias linhas
  • De uma única coluna de uma tabela
  • E retornando um único valor.

A norma ISO define cinco (5) funções agregadas, a saber:

  1. CONTAGEM
  2. SOMA
  3. AVG
  4. MIN
  5. MAX

Uma única regra se aplica a todos os cinco: As funções de agregação ignoram valores NULL.. COUNT(*) é a única exceção, e veremos o porquê abaixo.

Por que usar funções agregadas

Os diferentes níveis hierárquicos de uma organização têm diferentes necessidades de informação. Os gestores de topo geralmente estão interessados ​​em números absolutos, e não em detalhes individuais.

As funções agregadas nos permitem produzir facilmente dados resumidos de nosso banco de dados.

Por exemplo, a partir do nosso banco de dados Myflix, a gerência pode exigir os seguintes relatórios:

  • Filmes menos alugados.
  • Filmes mais alugados.
  • Número médio de vezes que cada filme é alugado por mês.

Todos os relatórios acima são provenientes de funções de agregação. Vamos analisar cada uma delas em detalhes.

Função COUNT

A função COUNT retorna o número total de valores no campo especificado, tanto para tipos de dados numéricos quanto não numéricos. Como toda função de agregação, COUNT(coluna) exclui valores NULL.

COUNT(*) é uma forma especial que retorna a contagem de todas as linhas em uma tabela. Ela também conta NULOS e duplicados, porque conta linhas em vez de valores.

A tabela de aluguéis de filmes contém os seguintes dados:

número de referência transação_data data de retorno número de membro id_do_filme filme_ retornou
11 20-06-2012 NULL 1 1 0
12 22-06-2012 25-06-2012 1 2 0
13 22-06-2012 25-06-2012 3 2 0
14 21-06-2012 24-06-2012 2 2 0
15 23-06-2012 NULL 3 3 0

Suponhamos que queiramos obter o número de vezes que o filme com o ID 2 foi alugado.

SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;

Executando isso em MySQL Workbench A consulta ao myflixdb retorna 3, porque três linhas contêm o movie_id 2.

CONTAR(`movie_id`)
3

Palavra-chave DISTINTA

A resposta para "contar" é "quantos?". A próxima pergunta geralmente é "quantos?". diferente “uns”, e é para isso que serve o DISTINCT.

Palavra-chave DISTINTA

A palavra-chave DISTINCT omite duplicados dos nossos resultados por grupo.ping Valores idênticos juntos, exatamente como sugere a ilustração acima.

Primeiro, vamos executar uma consulta simples.

SELECT `movie_id` FROM `movierentals`;
id_do_filme
1
2
2
2
3

Agora, a mesma consulta com a palavra-chave DISTINCT:

SELECT DISTINCT `movie_id` FROM `movierentals`;

DISTINCT omite os registros duplicados:

id_do_filme
1
2
3

COUNT vs COUNT(*) vs COUNT(DISTINCT): Qual você deve usar?

DISTINCT também pode ser colocado dentro uma função agregada, e é aqui que a maioria dos iniciantes se perde. track das quais linhas são efetivamente contadas. Os quatro formulários abaixo são executados na mesma tabela de aluguel de filmes de cinco linhas mostrada anteriormente, mas não retornam o mesmo número. A diferença reside em duas questões: o formulário conta linhas ou valores e mantém duplicados?

Contato O que importa Resultado em aluguel de filmes
CONTAR(*) Todas as linhas, incluindo duplicadas e linhas inteiramente nulas. 5
CONTAR(`movie_id`) Todos os valores não nulos na coluna, incluindo duplicados. 5
CONTAR(`data_de_retorno`) Somente valores não nulos — as duas datas de retorno nulas são ignoradas. 3
CONTAR(DISTINCT `movie_id`) Somente valores únicos não nulos. 3
SELECT COUNT(*) AS `all_rows`,
       COUNT(`return_date`) AS `returned_rows`,
       COUNT(DISTINCT `movie_id`) AS `unique_movies`
FROM `movierentals`;

💡 Dica: Use COUNT(*) para contar as linhas, COUNT(coluna) quando um valor NULL deve significar "não se aplica" e COUNT(DISTINCT coluna) para valores únicos. O oposto de DISTINCT é ALL — o padrão, e portanto raramente escrito por extenso.

Função MIN

A função MÍN. retorna o menor valor no campo da tabela especificado.

Suponhamos que queiramos saber o ano em que o filme mais antigo da nossa biblioteca foi lançado. MySQLA função MIN de 's nos fornece isso.

SELECT MIN(`year_released`) FROM `movies`;

Resultado:

MIN(`ano_de_lançamento`)
2005

Função MAX

Tal como o nome sugere, a função MAX é o oposto da função MIN. Isto retorna o maior valor do campo da tabela especificado.

Suponha que queiramos saber o ano de lançamento do filme mais recente em nosso banco de dados. O exemplo a seguir retorna essa informação.

SELECT MAX(`year_released`) FROM `movies`;

Resultado:

MÁXIMO(`ano_de_lançamento`)
2012

Função SUM

MIN e MAX selecionam um valor existente de uma coluna. SUM e AVG Calcule um novo número a partir de toda a coluna.

Suponha que desejemos o valor total dos pagamentos efetuados até o momento. MySQL SOMA função Retorna a soma de todos os valores na coluna especificada.. SUM funciona apenas em campos numéricos e Valores NULL são excluídos do resultado..

A tabela a seguir mostra os dados da tabela de pagamentos.

pagamento_id número de membro data de pagamento descrição quantia paga número_de referência_externo
1 1 23-07-2012 Pagamento de aluguel de filme 2500 11
2 1 25-07-2012 Pagamento de aluguel de filme 2000 12
3 3 30-07-2012 Pagamento de aluguel de filme 6000 NULL

A consulta mostrada abaixo obtém todos os pagamentos efetuados e os soma em um único resultado: 2500 + 2000 + 6000 = 10500.

SELECT SUM(`amount_paid`) FROM `payments`;

Resultado:

SOMA(`valor_pago`)
10500

AVG função

O MySQL AVG função retorna a média dos valores em uma coluna especificada. Assim como a função SUM, ela funciona apenas em tipos de dados numéricos.

Suponha que queiramos encontrar o valor médio pago. Podemos usar a seguinte consulta, que divide o total de 10500 pelas três linhas de pagamento que não contêm valores nulos.

SELECT AVG(`amount_paid`) FROM `payments`;

Resultado:

AVG(`valor_pago`)
3500

⚠️ Aviso: AVG A divisão é feita pelo número de linhas não nulas, e não pela quantidade de linhas da tabela. Um valor nulo é ignorado em vez de ser contado como zero, o que silenciosamente aumenta a média. Use AVG(IFNULL(`amount_paid`, 0)) quando um valor ausente significa zero.

Exemplo prático: Combinando funções de agregação com GROUP BY

Cada função acima retornou um valor para a tabela inteira. Adicionando um GROUP BY A cláusula retorna um número. por grupo Em vez disso — e é assim que se constroem relatórios verdadeiros.

O exemplo a seguir agrupa os membros por nome e, em seguida, contabiliza o número total de pagamentos, o valor médio do pagamento e o total geral dos valores pagos a cada membro.

SELECT m.`full_names`,
       COUNT(p.`payment_id`) AS `paymentscount`,
       AVG(p.`amount_paid`) AS `averagepaymentamount`,
       SUM(p.`amount_paid`) AS `totalpayments`
FROM members m, payments p
WHERE m.`membership_number` = p.`membership_number`
GROUP BY m.`full_names`;

Executando o exemplo acima em MySQL O Workbench nos fornece os seguintes resultados.

AVG Função usada com GROUP BY

A consulta une as duas tabelas na cláusula WHERE — o estilo antigo de junção por vírgula. O código moderno escreve a mesma lógica de forma explícita. JUNÇÃO INTERNA… LIGADOObserve também que todas as colunas não agregadas na lista SELECT devem aparecer em GROUP BY, ou MySQL A versão 5.7 e posteriores rejeitam a consulta em ONLY_FULL_GROUP_BY. Consulte o oficial MySQL referência de função agregada.

Perguntas Frequentes

O Cláusula WHERE filtra linhas individuais antes do cálculo do agregado. HAVING filtra os resultados agrupados posteriormente, portanto, somente HAVING pode referenciar um agregado como COUNT(*) ou SUM(valor_pago).

Sim. Sem o GROUP BY, a agregação trata todo o conjunto de resultados como um único grupo e retorna exatamente uma linha. Adicionar o GROUP BY divide esse resultado em uma linha para cada valor de grupo distinto.

Sim. Ao contrário de SUM e AVGAs funções MIN e MAX funcionam em qualquer tipo comparável. Em uma coluna de texto, elas retornam o primeiro e o último valor em ordem alfabética, e em uma coluna de data, as datas mais antiga e mais recente.

Sim. Os assistentes de texto para SQL traduzem perguntas como "pagamento médio por membro" em uma consulta GROUP BY. Execute o SQL gerado em MySQL Workbench Verifique a contagem de linhas antes de confiar nos números.

A causa mais comum é o tratamento de valores NULL e linhas de junção duplicadas. Um modelo de IA pode escolher COUNT(*) onde COUNT(coluna) seria necessário, ou unir uma tabela duas vezes, o que infla todos os valores de SUM. Sempre verifique com um valor conhecido.

Resuma esta postagem com: