Resumo : neste tutorial, você aprenderá como usar AVG()
a função MySQL para calcular o valor médio de um conjunto de valores.
Introdução à função MySQL AVG()
A função MySQL AVG()
é uma função agregada que permite calcular o valor médio de um conjunto de valores.
Aqui está a sintaxe da AVG()
função:
AVG(DISTINCT expression)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você usa o DISTINCT
operador na AVG
função para calcular o valor médio dos valores distintos.
Por exemplo, se você tiver um conjunto de valores 1,1,2,3, a AVG
função com DISTINCT
operador retornará 2, ou seja (1 + 2 + 3) / 3
,.
Exemplos de funções MySQL AVG()
Usaremos a products
tabela do banco de dados de exemplo para a demonstração:
1) Usando a função MySQL AVG() para calcular uma média de todos os valores em um exemplo de coluna
Este exemplo usa a AVG()
função para calcular o preço médio de compra de todos os produtos da products
tabela:
SELECT
AVG(buyprice) 'Average Price'
FROM
products;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Usando a função MySQL AVG() com um exemplo de cláusula WHERE
O exemplo a seguir usa a AVG()
função para calcular o preço médio de compra dos produtos da linha de produtos Classic Cars
:
SELECT
AVG(buyprice) 'Average Classic Cars Price'
FROM
products
WHERE
productline = 'Classic Cars';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo, a WHERE
cláusula possui uma condição que inclui apenas a linha de produtos Carros Clássicos. Portanto, a AVG()
função calcula o valor médio dos preços de compra de produtos apenas em Carros Clássicos.
3) Exemplo de uso do MySQL AVG com opção DISTINCT
Esta consulta verifica se há algum produto com os mesmos preços:
SELECT
COUNT(buyprice) - COUNT(DISTINCT buyprice)
FROM
products;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta consulta utiliza a AVG()
função com a DISTINCT
opção de calcular a média de preços de compra distintos:
SELECT
FORMAT(AVG(DISTINCT buyprice), 2)
FROM
products;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que o resultado é diferente do preço médio de compra sem usar o DISTINCT
operador.
4) MySQL AVG com exemplo de cláusula GROUP BY
A AVG()
função é frequentemente usada em conjunto com a GROUP BY
cláusula para calcular o valor médio de cada grupo de linhas de uma tabela.
Por exemplo, para calcular o preço médio de compra de produtos para cada linha de produtos, você usa a AVG()
função com a GROUP BY
cláusula como a seguinte consulta:
SELECT
productline,
AVG(buyprice) 'Average Price'
FROM
products
GROUP BY productline;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
5) Usando a função MySQL AVG() com um HAVING
exemplo de cláusula
Você pode usar a AVG()
função na HAVING
cláusula para definir condições para os valores médios dos grupos.
Por exemplo, se quiser selecionar apenas linhas de produtos que tenham preços médios de compra do produto superiores a 50, você poderá usar a seguinte consulta:
SELECT
productline,
AVG(buyprice) 'Average Price'
FROM
products
GROUP BY productline
HAVING AVG(buyprice) > 50;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
6) Usando a função MySQL AVG() com um exemplo de subconsulta
Você pode usar a AVG()
função em uma instrução SQL diversas vezes para calcular o valor médio de um conjunto de valores médios.
Esta consulta usa a AVG()
função para calcular o preço médio de compra dos preços médios de compra das linhas de produtos:
SELECT
AVG(pl_avg) 'Average Product'
FROM
(SELECT
AVG(buyprice) pl_avg
FROM
products
GROUP BY productline) avgs;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como funciona.
- A subconsulta calcula o preço médio de compra por linha de produto.
- A consulta externa calcula o preço médio de compra dos preços médios de compra das linhas de produtos retornadas da subconsulta.
7) Usando a função MySQL AVG() com NULL
exemplo
A AVG()
função ignora NULL
valores no cálculo. Veja o exemplo a seguir:
Primeiro, crie uma nova tabela chamada t
com duas colunas id
e val
. A val
coluna pode conter NULL
valores.
CREATE TABLE IF NOT EXISTS t (
id INT AUTO_INCREMENT PRIMARY KEY,
val INT
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira algumas linhas na t
tabela, incluindo NULL
valor.
INSERT INTO t(val)
VALUES(1),(2),(nulL),(3);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, calcule o valor médio dos valores na val
coluna usando a AVG
função:
SELECT
AVG(val)
FROM
t;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução retorna 2 conforme esperado porque o NULL
valor não está incluído no cálculo da AVG
função.
8) Usando a função MySQL AVG() com funções de fluxo de controle
Para calcular o valor médio de uma coluna e calcular o valor médio da mesma coluna condicionalmente em uma única instrução, você usa AVG()
função com funções de fluxo de controle , por exemplo, IF , CASE , IFNULL e NULLIF .
Por exemplo, para calcular a razão entre o preço médio de compra da Classic Cars
linha de produtos e o preço médio de compra de todos os produtos, você usa a seguinte declaração:
SELECT
AVG(IF(productline = 'Classic Cars',
buyprice,
NULL)) / AVG(buyprice) 'Classic Cars/ Products'
FROM
products;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A IF(productline='Classic Cars',buyprice,NULL)
expressão retorna o preço de compra se a linha de produto for Classic Cars
, caso contrário NULL
.
Como a AVG()
função ignora os NULL
valores no cálculo, a AVG(IF(productline='Classic Cars',buyprice,NULL))
expressão retorna o preço médio de compra apenas para produtos cuja linha de produtos é Classic Cars
.
Resumo
- Use a
AVG()
função para calcular o valor médio de um conjunto de valores. - Use a
AVG()
função com aGROUP BY
cláusula para calcular o valor médio de cada grupo.