MySQL – Funções de Agregação (MAX, MIN, AVG, COUNT, SUM) – 18

MySQL – Funções de Agregação (MAX, MIN, AVG, COUNT, SUM)

Funções de agregação são funções SQL que permitem executar uma operação aritmética nos valores de uma coluna em todos os registros de uma tabela.

Retornam um valor simples baseado em um conjunto de valores de entrada.

Sintaxe básica:

função(ALL | DISTINCT expressão)

ALL – avalia todos os registros ao agregar o valor da função; é o comportamento padrão.

DISTINCT – Usa apenas valores distintos (sem repetição) ao avaliar a função.

As funções de agregação desconsideram valores NULL (com exceção da função COUNT(*)).

As principais funções de agregação (mais comuns) em MySQL são as seguintes:

  • MIN = Valor Mínimo de um conjunto de valores
  • MAX = Valor Máximo de um conjunto de valores
  • AVG = Média Aritmética de um conjunto de valores
  • SUM = Total (Soma) de um conjunto de valores
  • COUNT = Contar quantidade total de itens

A funções SUM e AVG somente aceitam como entrada um conjunto de números; já as demais funções podem operar também com outros tipos de dados não-numéricos, como por exemplo strings (caracteres) ou datas.

Vamos a alguns exemplos usando o banco de dados db_biblioteca.

Exemplos

1 – Retornar o número total de autores cadastrados na tabela de autores:

SELECT COUNT(*) FROM tbl_autores;

2 – Contar o número de autores que possuem livros cadastrados na tabela de autores, sem repetições

SELECT COUNT(DISTINCT id_autor) FROM tbl_Livro;

3 – Descobrir o preço mais alto dos livros:

SELECT MAX(Preco_Livro) FROM tbl_Livro;

4 – Descobrir a data de publicação do livro mais antigo:

SELECT MIN(Data_Pub) FROM tbl_Livro;

5 – Retornar o preço médio dos livros cadastrados no banco:

SELECT AVG(Preco_Livro) FROM tbl_Livro;

6 – Descobrir o valor total dos livros presentes na tabela de livros:

SELECT SUM(Preco_Livro) FROM tbl_Livro;

É muito comum usar as funções agregadas em conjunto com a cláusula GROUP BY, aplicando-as a grupos de dados específicos.

Assista à explicação sobre os exemplos acima (e outros) no vídeo da Bóson Treinamentos a seguir:

Sobre Fábio dos Reis (1194 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

10 Comentários em MySQL – Funções de Agregação (MAX, MIN, AVG, COUNT, SUM) – 18

  1. Jonas Medeiros Ferreira // 06/02/2015 em 10:57 // Responder

    Olá! Muito legal sua aula. Me deparei com uma dúvida e se pudesse, gostaria de contar com sua ajuda.
    Tenho um cenário quero contar as ocorrências em duas tabelas distintas em um mesmo select. Até o momento, cheguei na seguinte consulta:
    SELECT count(a.id) as qtdea FROM tabelaa as a union
    select count(b.id) as qtdeb from tabelab as b;

    Esta consulta me retorna os valores desejados, porém em uma única coluna.
    A minha dúvida é como reformular esta consulta e forma a ela me retornar os resultados em duas colunas, uma com cada alias correspondente?

  2. Caroline Castro // 05/11/2015 em 15:50 // Responder

    MUITO BOM, VALEU,SERIA BOM SE VC COLOCASSE TAMBÉM CONSULTA DE DUAS OU MAIS TABELAS DISTINTAS

  3. ola, vc é meu mestre dos magos, deixando a babação de lado,
    eu quero saber o seguinte tenho uma tabela assim (odometro inicial, valor 126.963, odometro parcial, valor 126.999, odometro final, valor 127.126.
    como eu teria um resultado e como ficaria a formula da tabela? obrigado
    obs: a formula que eu uso no caderno é assim incerante(final) (-) (inicial) iniciante

  4. Boa tarde amigo, quero lhe agradecer por seu conteúdo didático e esclarecedor. Mas gostaria de uma ajuda sua:
    É possível dar nome a função SUM((c.quantidadeWeb * c.valor_web) + (c.quantidadeCall * c.valor_call)) ?
    Para não ficar chamando esse texto enorme.

  5. Boa tarde.
    Será que poderia me ajudar?
    Preciso puxar a data mais recente. ou seja retornar um unico valor.
    select distinct
    pd.CdClassificacao,
    pr.NmCaracteristicaProduto,
    pd.NmProduto,
    st.NmSetor,
    es.qtestoque
    from CodigoProduto cp
    join ProdutoCaracteristicaProduto pc on (pc.IdProduto=cp.idproduto)
    join CaracteristicaProduto pr on (pr.IdCaracteristicaProduto=pc.IdCaracteristicaProduto)
    join EstoqueEmpresa ee on (ee.IdProduto=cp.idproduto)
    join EstoqueSetor es on (es.IdProduto=cp.idproduto)
    join produto pd on (pd.IdProduto=cp.idproduto)
    join setor st on (st.IdSetor=es.IdSetor)
    where cp.StCodigoPrincipal=(‘S’)
    and st.CdEmpresa in (’18’)
    and pd.CdClassificacao =’008045′

    and pr.CdClassificacao in (‘1.001′,’1.002′,’1.003′,’1.004′,’1.005′,’1.006′,’1.007′,’1.008′,’1.009′,’1.010′,’1.011’)

    ORDER BY es.qtestoque

  6. Liste o Leitor mais velho.
    a)SELECT COUNT(DATANASCIMENTO) FROM LEITORES WHERE CODIGOLEITOR>0
    b)SELECT MAX(DATANASCIMENTO) FROM LEITORES
    c)SELECT MIN(DATANASCIMENTO) FROM LEITORES
    d)SELECT SUM(CODIGOLEITOR) FROM LEITORES
    e)SELECT AVG(CODIGOLEITOR) FROM LEITORES WHERE CODLEITOR>0

  7. Check_Panzo // 07/08/2021 em 8:00 // Responder

    Ola amigo, as suas aulas têm dado muito suporte para mim.
    desejo-lhe tudo de bom

  8. isack vitor // 13/10/2021 em 13:56 // Responder

    — Table para fazer o relatorio de vendas de entrada de saldo diario. —
    CREATE TABLE IF NOT EXISTS sold_balance(
    type TEXT PRIMARY KEY NOT NULL, — Tipo abastecimento (manual ou auto)
    value INTEGER NOT NULL, — Valor adicionado
    owner INTEGER NOT NULL, — ID de quem abasteceu
    add_balance_date TEXT DEFAULT (datetime(‘now’,’localtime’))
    );

    seguindo o modelo da table queria agrupar o os valores abastecidos (valor) pelo type (manual, automatico)…. queria fazer um SUM() na lista de cada agrupamento de valores

Escreva um comentário

Seu e-mail não será divulgado


*