SQLite
 sql >> Base de données >  >> RDS >> SQLite

SQLite AVG

Résumé :dans ce tutoriel, vous apprendrez à utiliser le SQLite AVG fonction pour calculer la valeur moyenne d'un ensemble de valeurs.

Introduction à la fonction SQLite AVG

La AVG la fonction est une fonction d'agrégation qui calcule la valeur moyenne de toutes les valeurs non NULL au sein d'un groupe.

Ce qui suit illustre la syntaxe du AVG fonction :

AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)

Par défaut, le AVG la fonction utilise ALL clause que vous la spécifiiez ou non. Cela signifie que la fonction AVG prendra toutes les valeurs non NULL lorsqu'elle calculera la valeur moyenne.

Si vous souhaitez calculer la valeur moyenne de valeurs distinctes (ou uniques), vous devez spécifier explicitement la clause DISTINCT dans expression.

Si une colonne stocke des types de données mixtes tels que entier, réel, BLOB et texte, SQLite AVG interprète le BLOB qui ne ressemble pas à un nombre comme zéro (0).

La valeur de AVG la fonction est toujours une valeur à virgule flottante ou un NULL valeur. La AVG la fonction ne renvoie qu'un NULL valeur si et seulement si toutes les valeurs du groupe sont NULL valeurs.

Vous pouvez faire un test rapide pour voir comment la fonction SQLite fonctionne avec différents types de données.

Tout d'abord, créez une nouvelle table nommée avg_tests en utilisant l'instruction suivante :

CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql)

Essayez-le

Ensuite, insérez des valeurs mixtes dans le avg_tests tableau.

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)

Essayez-le

Ensuite, interrogez les données de avg_tests tableau.

SELECT rowid,
       val
  FROM avg_tests;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Après cela, vous pouvez utiliser le AVG fonction pour calculer la moyenne des quatre premières lignes qui ne contiennent que des valeurs numériques.

SELECT
	avg(val)
FROM
	avg_tests
WHERE
	rowid < 5;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Enfin, appliquez le AVG fonction à toutes les valeurs dans le val colonne des avg_tests tableau.

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Vous avez 9 lignes dans avg_tests table. La ligne 7 est NULL . Par conséquent, lors du calcul de la moyenne, le AVG la fonction l'ignore et prend 8 lignes dans le calcul.

Les quatre premières lignes sont les valeurs entières et réelles :1,2, 10,1 et 20,5. La fonction SQLite AVG utilise ces valeurs dans le calcul.

Les 5e et 6e rangées sont de type texte car nous avons inséré les lettres « B » et « 8 ». Parce que 8 ressemble à un nombre, donc SQLite interprète B comme 0 et '8' comme 8.

Les 8e et 9e lignes sont BLOB types qui ne ressemblent pas à des nombres, par conséquent, SQLite interprète ces valeurs comme 0.

Le AVG(cal) expression utilise la formule suivante :

AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)

Voyons comment le DISTINCT la clause fonctionne.

Tout d'abord, insérez une nouvelle ligne dans le avg_tests table avec une valeur existe déjà.

INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql)

Essayez-le

Deuxièmement, appliquez le AVG fonction sans DISTINCT clause :

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Troisièmement, ajoutez le DISTINCT clause à AVG fonction :

SELECT
	avg(DISTINCT val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Parce que les avg_tests table a deux lignes avec la même valeur 10.1, le AVG(DISTINCT) ne prend qu'une ligne pour le calcul. Par conséquent, vous avez obtenu un résultat différent.

SQLite AVG fonction exemples pratiques

Nous utiliserons les tracks table dans l'exemple de base de données pour la démonstration.

Pour calculer la longueur moyenne de toutes les pistes en millisecondes, utilisez l'instruction suivante :

SELECT
	avg(milliseconds)
FROM
	tracks;Code language: SQL (Structured Query Language) (sql)

Essayez-le

Fonction SQLite AVG avec GROUP BY clause

Pour calculer la longueur moyenne des pistes pour chaque album, vous utilisez le AVG fonction avec le GROUP BY clause.

Tout d'abord, le GROUP BY La clause regroupe un ensemble de pistes par albums. Ensuite, le AVG calcule la longueur moyenne des pistes pour chaque album.

Voir la déclaration suivante.

SELECT
	albumid,
	avg(milliseconds)
FROM
	tracks
GROUP BY
	albumid;Code language: SQL (Structured Query Language) (sql)

Essayez-le

SQLite AVG fonction avec INNER JOIN exemple de clause

Pour obtenir le titre de l'album avec l'albumid colonne, vous utilisez la clause INNER JOIN dans l'instruction ci-dessus comme la requête suivante :

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)

Essayez-le

Notez que nous avons utilisé le ROUND fonction pour arrondir la valeur flottante à 2 chiffres à droite de la virgule décimale.

Fonction SQLite AVG avec exemple de clause HAVING

Vous pouvez utiliser soit le AVG fonction ou l'alias de sa colonne dans la clause HAVING pour filtrer les groupes. L'instruction suivante n'obtient que les albums dont la longueur moyenne est comprise entre 100 000 et 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)

Essayez-le

Dans ce tutoriel, nous vous avons montré comment utiliser le SQLite AVG fonction pour calculer les valeurs moyennes des valeurs non NULL dans un groupe.