Resumo : neste tutorial você aprenderá como usar a AVG
função SQLite para calcular o valor médio de um conjunto de valores.
Introdução à função SQLite AVG
A AVG
função é uma função agregada que calcula o valor médio de todos os valores não NULOS dentro de um grupo.
O seguinte ilustra a sintaxe da AVG
função:
AVG([ALL | DISTINCT] expression);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por padrão, a AVG
função usa ALL
cláusula, independentemente de você especificá-la ou não. Isso significa que a função AVG aceitará todos os valores não NULOS ao calcular o valor médio.
Caso queira calcular o valor médio de valores distintos (ou únicos), é necessário especificar explicitamente a cláusula DISTINCT na expressão.
Se uma coluna armazena tipos de dados mistos , como inteiro, real, BLOB e texto, AVG
a função SQLite interpreta o BLOB que não se parece com um número como zero (0).
O valor da AVG
função é sempre um valor de ponto flutuante ou um NULL
valor. A AVG
função só retorna um NULL
valor se e somente se todos os valores do grupo forem NULL
valores.
Você pode fazer um teste rápido para ver como a função SQLite funciona com vários tipos de dados.
Primeiro, crie uma nova tabela nomeada avg_tests
usando a seguinte instrução:
CREATE TABLE avg_tests (val);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A seguir, insira alguns valores mistos na avg_tests
tabela.
INSERT INTO avg_tests (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('8'),
('B'),
(NULL),
(x'0010'),
(x'0011');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em seguida, consulte os dados da avg_tests
tabela.
SELECT rowid,
val
FROM avg_tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Depois disso, você pode usar a AVG
função para calcular a média das primeiras quatro linhas que contêm apenas valores numéricos.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por fim, aplique a AVG
função a todos os valores da val
coluna da avg_tests
tabela.
SELECT
avg(val)
FROM
avg_tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você tem 9 linhas na avg_tests
tabela. A linha 7 é NULL
. Portanto, ao calcular a média, a AVG
função a ignora e leva 8 linhas para o cálculo.
As primeiras quatro linhas são os valores inteiros e reais: 1,2, 10,1 e 20,5. A função SQLite AVG usa esses valores no cálculo.
A 5ª e 6ª linha são do tipo texto porque inserimos como ‘B’ e ‘8’. Como 8 parece um número, o SQLite interpreta B como 0 e ‘8’ como 8.
A 8ª e a 9ª linhas são BLOB
tipos que não se parecem com números, portanto, o SQLite interpreta esses valores como 0.
A AVG(cal)
expressão usa a seguinte fórmula:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos ver como DISTINCT
funciona a cláusula.
Primeiro, insira uma nova linha na avg_tests
tabela com um valor já existente.
INSERT INTO avg_tests (val)
VALUES (10.1);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, aplique a AVG
função sem DISTINCT
cláusula:
SELECT
avg(val)
FROM
avg_tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, adicione a DISTINCT
cláusula à AVG
função:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como a avg_tests
tabela possui duas linhas com o mesmo valor 10,1, ela AVG(DISTINCT)
utiliza apenas uma linha para cálculo. Portanto, você obteve um resultado diferente.
AVG
Exemplos práticos de funções SQLite
Usaremos a tracks
tabela do banco de dados de exemplo para a demonstração.
Para calcular a duração média de todas as faixas em milissegundos, use a seguinte instrução:
SELECT
avg(milliseconds)
FROM
tracks;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Função SQLite AVG com GROUP BY
cláusula
Para calcular a duração média das faixas de cada álbum, você usa a AVG
função com a GROUP BY
cláusula.
Primeiro, a GROUP BY
cláusula agrupa um conjunto de faixas por álbuns. Em seguida, a AVG
função calcula a duração média das faixas de cada álbum.
Veja a seguinte declaração.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
AVG
Função SQLite com INNER JOIN
exemplo de cláusula
Para obter o título do álbum junto com a albumid
coluna, você usa a cláusula INNER JOIN na instrução acima, como na seguinte consulta:
SELECT
tracks.AlbumId,
Title,
round(avg(Milliseconds), 2) avg_length
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que usamos a ROUND
função para arredondar o valor flutuante para 2 dígitos à direita da vírgula decimal.
Função SQLite AVG com exemplo de cláusula HAVING
Você pode usar a AVG
função ou o alias de sua coluna na cláusula HAVING para filtrar grupos. A declaração a seguir obtém apenas os álbuns cuja duração média está entre 100.000 e 200.000.
SELECT
tracks.albumid,
title,
round(avg(milliseconds),2) avg_leng
FROM
tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
tracks.albumid
HAVING
avg_leng BETWEEN 100000 AND 200000;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, mostramos como usar a AVG
função SQLite para calcular os valores médios de valores não NULL em um grupo.