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:
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?
MUITO BOM, VALEU,SERIA BOM SE VC COLOCASSE TAMBÉM CONSULTA DE DUAS OU MAIS TABELAS DISTINTAS
Opa, boa sugestão Caroline, obrigado!
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
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.
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
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
Ola amigo, as suas aulas têm dado muito suporte para mim.
desejo-lhe tudo de bom
Muito obrigado amigo!
— 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