sql >> Base de Datos >  >> RDS >> SQLite

Promedio de SQLite

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.