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