Resumo :neste tutorial, você aprenderá como usar o SQLite
AVG
função para calcular o valor médio de um conjunto de valores. Introdução à função SQLite AVG
O
AVG
function é uma função agregada que calcula o valor médio de todos os valores não NULL dentro de um grupo. O seguinte ilustra a sintaxe do
AVG
função:AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
Por padrão, o
AVG
função usa ALL
cláusula independentemente de você especificá-la ou não. Isso significa que a função AVG terá todos os valores não NULL quando calcular o valor médio. Caso você queira calcular o valor médio de valores distintos (ou únicos), você precisa especificar a cláusula DISTINCT explicitamente na expressão.
Se uma coluna armazena tipos de dados mistos, como inteiro, real, BLOB e texto, SQLite
AVG
A função interpreta o BLOB que não se parece com um número como zero (0). O valor do
AVG
função é sempre um valor de ponto flutuante ou um NULL
valor. O AVG
função retorna apenas um NULL
valor se e somente se todos os valores no grupo são 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 chamada
avg_tests
usando a seguinte declaração:CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Tente
Em seguida, insira alguns valores mistos no
avg_tests
tabela. INSERT INTO avg_tests (val)
VALUES
(1),
(2),
(10.1),
(20.5),
('8'),
('B'),
(NULL),
(x'0010'),
(x'0011');
Code language: SQL (Structured Query Language) (sql)
Tente
Em seguida, consulte os dados do
avg_tests
tabela. SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Tente
Depois disso, você pode usar o
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;
Code language: SQL (Structured Query Language) (sql)
Tente
Por fim, aplique o
AVG
função para todos os valores no val
coluna do avg_tests
tabela. SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Tente
Você tem 9 linhas no
avg_tests
tabela. A linha 7 é NULL
. Portanto, ao calcular a média, o AVG
função 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 a 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 9ª linhas são
BLOB
tipos que não se parecem com números, portanto, o SQLite interpreta esses valores como 0. O
AVG(cal)
expressão usa a seguinte fórmula:AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Vamos ver como o
DISTINCT
cláusula funciona. Primeiro, insira uma nova linha no
avg_tests
já existe uma tabela com um valor. INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Tente
Segundo, aplique o
AVG
função sem DISTINCT
cláusula:SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Tente
Terceiro, adicione o
DISTINCT
cláusula para o AVG
função:SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Tente
Porque os
avg_tests
tabela tem duas linhas com o mesmo valor 10.1, o AVG(DISTINCT)
leva apenas uma linha para cálculo. Portanto, você obteve um resultado diferente. SQLite AVG
exemplos práticos de funções
Usaremos as
tracks
tabela no 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;
Code language: SQL (Structured Query Language) (sql)
Tente
Função SQLite AVG com GROUP BY
cláusula
Para calcular a duração média das faixas de cada álbum, você usa o
AVG
função com o GROUP BY
cláusula. Primeiro, o
GROUP BY
cláusula agrupa um conjunto de faixas por álbuns. Em seguida, o AVG
A função calcula a duração média das faixas para cada álbum. Veja a seguinte declaração.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Tente
SQLite AVG
função com INNER JOIN
exemplo de cláusula
Para obter o título do álbum junto com o
albumid
coluna, você usa a cláusula INNER JOIN na instrução acima como a 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;
Code language: SQL (Structured Query Language) (sql)
Tente
Observe que usamos o
ROUND
função para arredondar o valor flutuante para 2 dígitos à direita do ponto decimal. Função SQLite AVG com exemplo de cláusula HAVING
Você pode usar o
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;
Code language: SQL (Structured Query Language) (sql)
Tente
Neste tutorial, mostramos como usar o SQLite
AVG
função para calcular os valores médios de valores não NULL em um grupo.