Samenvatting :in deze tutorial leer je hoe je de SQLite AVG
. gebruikt functie om de gemiddelde waarde van een reeks waarden te berekenen.
Inleiding tot de SQLite AVG-functie
De AVG
functie is een geaggregeerde functie die de gemiddelde waarde berekent van alle niet-NULL-waarden binnen een groep.
Het volgende illustreert de syntaxis van de AVG
functie:
AVG([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
Standaard is de AVG
functie gebruikt ALL
clausule, of u die nu specificeert of niet. Dit betekent dat de AVG-functie alle niet-NULL-waarden aanneemt wanneer deze de gemiddelde waarde berekent.
Als u de gemiddelde waarde van afzonderlijke (of unieke) waarden wilt berekenen, moet u de clausule DISTINCT expliciet in expressie opgeven.
Als een kolom gemengde gegevenstypen opslaat, zoals geheel getal, reëel, BLOB en tekst, SQLite AVG
functie interpreteert de BLOB die er niet uitziet als een getal als nul (0).
De waarde van de AVG
functie is altijd een drijvende-kommawaarde of een NULL
waarde. De AVG
functie retourneert alleen een NULL
waarde als en alleen als alle waarden in de groep zijn NULL
waarden.
U kunt een snelle test doen om te zien hoe de SQLite-functie werkt met verschillende gegevenstypen.
Maak eerst een nieuwe tabel met de naam avg_tests
met behulp van de volgende verklaring:
CREATE TABLE avg_tests (val);
Code language: SQL (Structured Query Language) (sql)
Probeer het
Voeg vervolgens enkele gemengde waarden toe aan de avg_tests
tafel.
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)
Probeer het
Vraag vervolgens gegevens op uit de avg_tests
tafel.
SELECT rowid,
val
FROM avg_tests;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Daarna kunt u de AVG
. gebruiken functie om het gemiddelde te berekenen van de eerste vier rijen die alleen numerieke waarden bevatten.
SELECT
avg(val)
FROM
avg_tests
WHERE
rowid < 5;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Pas ten slotte de AVG
. toe functie voor alle waarden in de val
kolom van de avg_tests
tafel.
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Je hebt 9 rijen in de avg_tests
tafel. De rij 7 is NULL
. Daarom wordt bij het berekenen van het gemiddelde de AVG
functie negeert het en neemt 8 rijen mee in de berekening.
De eerste vier rijen zijn de gehele en reële waarden:1,2, 10,1 en 20,5. De SQLite AVG-functie gebruikt die waarden in de berekening.
De 5e en 6e rij zijn teksttype omdat we de als 'B' en '8' hebben ingevoegd. Omdat 8 op een getal lijkt, interpreteert SQLite B als 0 en '8' als 8.
De 8e en 9e rij zijn BLOB
typen die niet op getallen lijken, daarom interpreteert SQLite deze waarden als 0.
De AVG(cal)
uitdrukking gebruikt de volgende formule:
AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2
Code language: SQL (Structured Query Language) (sql)
Laten we eens kijken hoe de DISTINCT
clausule werkt.
Voeg eerst een nieuwe rij toe aan de avg_tests
tabel met een waarde bestaat al.
INSERT INTO avg_tests (val)
VALUES (10.1);
Code language: SQL (Structured Query Language) (sql)
Probeer het
Ten tweede, pas de AVG
. toe functie zonder DISTINCT
clausule:
SELECT
avg(val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Voeg ten derde de DISTINCT
. toe clausule aan de AVG
functie:
SELECT
avg(DISTINCT val)
FROM
avg_tests;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Omdat de avg_tests
tabel heeft twee rijen met dezelfde waarde 10.1, de AVG(DISTINCT)
neemt slechts die ene rij voor berekening. Daarom heb je een ander resultaat.
SQLite AVG
functie praktijkvoorbeelden
We gebruiken de tracks
tabel in de voorbeelddatabase voor de demonstratie.
Om de gemiddelde lengte van alle tracks in milliseconden te berekenen, gebruik je het volgende statement:
SELECT
avg(milliseconds)
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Probeer het
SQLite AVG-functie met GROUP BY
clausule
Om de gemiddelde lengte van tracks voor elk album te berekenen, gebruikt u de AVG
functie met de GROUP BY
clausule.
Eerst de GROUP BY
clausule groepeert een reeks nummers op albums. Vervolgens wordt de AVG
functie berekent de gemiddelde lengte van de tracks voor elk album.
Zie de volgende verklaring.
SELECT
albumid,
avg(milliseconds)
FROM
tracks
GROUP BY
albumid;
Code language: SQL (Structured Query Language) (sql)
Probeer het
SQLite AVG
functie met INNER JOIN
clausule voorbeeld
Om de albumtitel samen met de albumid
te krijgen kolom, gebruik je de INNER JOIN-clausule in de bovenstaande instructie zoals de volgende vraag:
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)
Probeer het
Merk op dat we de ROUND
. hebben gebruikt functie om de zwevende waarde af te ronden op 2 cijfers rechts van de komma.
SQLite AVG-functie met voorbeeld HAVING-clausule
U kunt ofwel de AVG
functie of de alias van de kolom in de HAVING-component om groepen te filteren. De volgende verklaring geeft alleen de albums met een gemiddelde lengte tussen 100000 en 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)
Probeer het
In deze tutorial hebben we je laten zien hoe je de SQLite AVG
. gebruikt functie om de gemiddelde waarden van niet-NULL-waarden in een groep te berekenen.