Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite AVG
funktion til at beregne gennemsnitsværdien af et sæt værdier.
Introduktion til SQLite AVG-funktion
AVG
funktion er en aggregeret funktion, der beregner gennemsnitsværdien af alle ikke-NULL-værdier inden for en gruppe.
Det følgende illustrerer syntaksen for AVG
funktion:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
Som standard er AVG
funktion bruger ALL
klausul, uanset om du angiver det eller ej. Det betyder, at AVG-funktionen tager alle ikke-NULL-værdier, når den beregner gennemsnitsværdien.
Hvis du ønsker at beregne gennemsnitsværdien af distinkte (eller unikke) værdier, skal du specificere DISTINCT-udtrykket eksplicit i udtryk.
Hvis en kolonne gemmer blandede datatyper såsom heltal, reelt, BLOB og tekst, SQLite AVG
funktion fortolker den BLOB, der ikke ligner et tal, som nul (0).
Værdien af AVG
funktion er altid en flydende kommaværdi eller en NULL
værdi. AVG
funktion returnerer kun en NULL
værdi hvis og kun hvis alle værdier i gruppen er NULL
værdier.
Du kan tage en hurtig test for at se, hvordan SQLite-funktionen fungerer med forskellige datatyper.
Først skal du oprette en ny tabel med navnet avg_tests
ved hjælp af følgende sætning:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Prøv det
Indsæt derefter nogle blandede værdier i avg_tests
tabel.
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)
Prøv det
Forespørg derefter data fra avg_tests
tabel.
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Derefter kan du bruge AVG
funktion til at beregne gennemsnittet af de første fire rækker, der kun indeholder numeriske værdier.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Til sidst skal du anvende AVG
funktion til alle værdierne i val
kolonne i avg_tests
tabel.
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Du har 9 rækker i avg_tests
bord. Rækken 7 er NULL
. Derfor, når gennemsnittet beregnes, er AVG
funktion ignorerer det og tager 8 rækker ind i beregningen.
De første fire rækker er heltal og reelle værdier:1,2, 10,1 og 20,5. SQLite AVG-funktionen bruger disse værdier i beregningen.
Den 5. og 6. række er teksttype, fordi vi indsatte som 'B' og '8'. Fordi 8 ligner et tal, fortolker SQLite derfor B som 0 og '8' som 8.
Den 8. og 9. række er BLOB
typer, der ikke ligner tal, derfor fortolker SQLite disse værdier som 0.
AVG(cal)
udtryk bruger følgende formel:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Lad os se, hvordan DISTINCT
klausul virker.
Indsæt først en ny række i avg_tests
tabel med en værdi findes allerede.
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det andet skal du anvende AVG
funktion uden DISTINCT
klausul:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det tredje skal du tilføje DISTINCT
klausul til AVG
funktion:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Fordi avg_tests
tabellen har to rækker med samme værdi 10.1, AVG(DISTINCT)
tager kun den ene række til beregning. Derfor fik du et andet resultat.
SQLite AVG
funktion praktiske eksempler
Vi vil bruge tracks
tabel i eksempeldatabasen til demonstrationen.
For at beregne den gennemsnitlige længde af alle spor i millisekunder, bruger du følgende sætning:
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite AVG-funktion med GROUP BY
klausul
For at beregne den gennemsnitlige længde af numre for hvert album, bruger du AVG
funktion med GROUP BY
klausul.
Først GROUP BY
klausul grupperer et sæt numre efter album. Derefter AVG
funktionen beregner den gennemsnitlige længde af numre for hvert album.
Se følgende erklæring.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Prøv det
SQLite AVG
funktion med INNER JOIN
klausuleksempel
For at få albumtitlen sammen med albumid
kolonne, bruger du INNER JOIN-sætningen i ovenstående sætning som følgende forespørgsel:
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)
Prøv det
Bemærk, at vi brugte ROUND
funktion til at afrunde den flydende værdi til 2 cifre til højre for decimaltegnet.
SQLite AVG-funktion med HAVING-sætningseksempel
Du kan bruge enten AVG
funktion eller dens kolonnes alias i HAVING-sætningen for at filtrere grupper. Følgende erklæring får kun de albums, hvis gennemsnitlige længde er mellem 100000 og 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)
Prøv det
I denne vejledning har vi vist dig, hvordan du bruger SQLite AVG
funktion til at beregne gennemsnitsværdierne af ikke-NULL værdier i en gruppe.