Resumen :en este tutorial, aprenderá a usar SQLite AVG
función para calcular el valor medio de un conjunto de valores.
Introducción a la función SQLite AVG
El AVG
es una función agregada que calcula el valor promedio de todos los valores no NULL dentro de un grupo.
A continuación se ilustra la sintaxis de AVG
función:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
De forma predeterminada, el AVG
la función usa ALL
cláusula ya sea que la especifique o no. Significa que la función AVG tomará todos los valores que no sean NULOS cuando calcule el valor promedio.
En caso de que desee calcular el valor promedio de valores distintos (o únicos), debe especificar la cláusula DISTINCT explícitamente en expresión.
Si una columna almacena tipos de datos mixtos, como enteros, reales, BLOB y texto, SQLite AVG
La función interpreta el BLOB que no parece un número como cero (0).
El valor del AVG
la función es siempre un valor de punto flotante o un NULL
valor. El AVG
la función solo devuelve un NULL
valor si y solo si todos los valores en el grupo son NULL
valores.
Puede realizar una prueba rápida para ver cómo funciona la función SQLite con varios tipos de datos.
Primero, crea una nueva tabla llamada avg_tests
usando la siguiente declaración:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Pruébalo
A continuación, inserte algunos valores mixtos en avg_tests
mesa.
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)
Pruébalo
Luego, consulte los datos de avg_tests
mesa.
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Después de eso, puedes usar el AVG
función para calcular el promedio de las primeras cuatro filas que contienen solo valores numéricos.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Finalmente, aplique el AVG
función a todos los valores en el val
columna de avg_tests
mesa.
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Tiene 9 filas en avg_tests
mesa. La fila 7 es NULL
. Por lo tanto, al calcular el promedio, el AVG
la función lo ignora y toma 8 filas en el cálculo.
Las primeras cuatro filas son los valores enteros y reales:1,2, 10.1 y 20.5. La función SQLite AVG usa esos valores en el cálculo.
Las filas 5 y 6 son de tipo texto porque las insertamos como 'B' y '8'. Debido a que 8 parece un número, SQLite interpreta B como 0 y '8' como 8.
Las filas 8 y 9 son BLOB
tipos que no parecen números, por lo tanto, SQLite interpreta estos valores como 0.
El AVG(cal)
expresión utiliza la siguiente fórmula:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Veamos cómo DISTINCT
funciona la cláusula.
Primero, inserte una nueva fila en avg_tests
ya existe una tabla con un valor.
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Pruébalo
En segundo lugar, aplique el AVG
función sin DISTINCT
cláusula:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Tercero, agregue el DISTINCT
cláusula al AVG
función:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Porque las avg_tests
la tabla tiene dos filas con el mismo valor 10.1, el AVG(DISTINCT)
toma solo una fila para el cálculo. Por lo tanto, obtuviste un resultado diferente.
SQLite AVG
ejemplos prácticos de funciones
Usaremos las tracks
tabla en la base de datos de muestra para la demostración.

Para calcular la duración promedio de todas las pistas en milisegundos, utilice la siguiente declaración:
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Pruébalo

Función SQLite AVG con GROUP BY
cláusula
Para calcular la duración promedio de las pistas de cada álbum, usa el AVG
función con el GROUP BY
cláusula.
Primero, el GROUP BY
cláusula agrupa un conjunto de pistas por álbumes. Entonces, el AVG
La función calcula la duración media de las pistas de cada álbum.
Consulte la siguiente declaración.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Pruébalo
SQLite AVG
función con INNER JOIN
ejemplo de cláusula
Para obtener el título del álbum junto con el albumid
columna, utiliza la cláusula INNER JOIN en la declaración anterior como la siguiente 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)
Pruébalo

Note que usamos el ROUND
función para redondear el valor flotante a 2 dígitos a la derecha del punto decimal.
Función SQLite AVG con ejemplo de cláusula HAVING
Puede usar el AVG
función o el alias de su columna en la cláusula HAVING para filtrar grupos. La siguiente declaración solo obtiene los álbumes cuya duración promedio está entre 100000 y 200000.
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)
Pruébalo

En este tutorial, le mostramos cómo usar SQLite AVG
función para calcular los valores promedio de valores no NULL en un grupo.