Sammanfattning :i den här handledningen kommer du att lära dig hur du använder SQLite AVG funktion för att beräkna medelvärdet för en uppsättning värden.
Introduktion till SQLite AVG-funktion
AVG funktion är en aggregerad funktion som beräknar medelvärdet för alla icke-NULL-värden inom en grupp.
Följande illustrerar syntaxen för AVG funktion:
AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)
Som standard är AVG funktionen använder ALL klausul oavsett om du anger det eller inte. Det betyder att AVG-funktionen tar alla icke-NULL-värden när den beräknar medelvärdet.
Om du vill beräkna medelvärdet för distinkta (eller unika) värden måste du ange DISTINCT-satsen uttryckligen i uttryck.
Om en kolumn lagrar blandade datatyper som heltal, reellt, BLOB och text, SQLite AVG funktionen tolkar BLOBEN som inte ser ut som ett tal som noll (0).
Värdet på AVG funktion är alltid ett flyttal eller en NULL värde. AVG funktion returnerar bara en NULL värde om och endast om alla värden i gruppen är NULL värden.
Du kan ta ett snabbtest för att se hur SQLite-funktionen fungerar med olika datatyper.
Skapa först en ny tabell med namnet avg_tests med följande uttalande:
CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql) Prova det
Därefter infogar du några blandade värden i avg_tests bord.
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) Prova det
Fråga sedan data från avg_tests bord.
SELECT rowid,
val
FROM avg_tests;Code language: SQL (Structured Query Language) (sql) Prova det
Efter det kan du använda AVG funktion för att beräkna medelvärdet av de första fyra raderna som endast innehåller numeriska värden.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;Code language: SQL (Structured Query Language) (sql) Prova det
Till sist, använd AVG funktion till alla värden i val kolumnen i avg_tests bord.
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Prova det
Du har 9 rader i avg_tests tabell. Rad 7 är NULL . Därför, vid beräkning av medelvärdet, AVG funktionen ignorerar det och tar 8 rader in i beräkningen.
De första fyra raderna är heltal och reella värden:1,2, 10,1 och 20,5. SQLite AVG-funktionen använder dessa värden i beräkningen.
Den 5:e och 6:e raden är texttyp eftersom vi infogade som 'B' och '8'. Eftersom 8 ser ut som ett tal, därför tolkar SQLite B som 0 och '8' som 8.
Den 8:e och 9:e raden är BLOB typer som inte ser ut som siffror, därför tolkar SQLite dessa värden som 0.
AVG(cal) uttryck använder följande formel:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)
Låt oss se hur DISTINCT klausul fungerar.
Först infogar du en ny rad i avg_tests Tabell med ett värde finns redan.
INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql) Prova det
För det andra, använd AVG funktion utan DISTINCT klausul:
SELECT
avg(val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Prova det
För det tredje, lägg till DISTINCT sats till AVG funktion:
SELECT
avg(DISTINCT val)
FROM
avg_tests;Code language: SQL (Structured Query Language) (sql) Prova det
Eftersom avg_tests tabellen har två rader med samma värde 10.1, AVG(DISTINCT) tar bara en rad för beräkning. Därför fick du ett annat resultat.
SQLite AVG funktion praktiska exempel
Vi kommer att använda tracks tabell i exempeldatabasen för demonstrationen.
För att beräkna medellängden för alla spår i millisekunder använder du följande sats:
SELECT
avg(milliseconds)
FROM
tracks;Code language: SQL (Structured Query Language) (sql) Prova det
SQLite AVG-funktion med GROUP BY klausul
För att beräkna den genomsnittliga längden på spår för varje album använder du AVG funktion med GROUP BY klausul.
Först, GROUP BY klausul grupperar en uppsättning spår efter album. Sedan, AVG funktionen beräknar den genomsnittliga längden på spår för varje album.
Se följande uttalande.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;Code language: SQL (Structured Query Language) (sql) Prova det
SQLite AVG funktion med INNER JOIN klausulexempel
För att få albumtiteln tillsammans med albumid kolumnen använder du INNER JOIN-satsen i ovanstående sats som följande fråga:
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) Prova det
Lägg märke till att vi använde ROUND funktion för att runda av det flytande värdet till 2 siffror till höger om decimalkomma.
SQLite AVG-funktion med HAVING-satsexempel
Du kan använda antingen AVG funktion eller dess kolumns alias i HAVING-satsen för att filtrera grupper. Följande uttalande får bara de album vars genomsnittliga längd är mellan 100000 och 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) Prova det
I den här handledningen har vi visat dig hur du använder SQLite AVG funktion för att beräkna medelvärdena för icke-NULL-värden i en grupp.