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.2Code 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.