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