SQLite avg()
funktion returnerer gennemsnitsværdien af alle ikke-NULL værdier i en gruppe.
Den accepterer ét argument, som er værdien eller gruppen af værdier.
Eksempel
Tag følgende tabel:
ProductId ProductName Price ---------- --------------------- ---------- 1 Blue Widgets (6 Pack) 389.45 2 Widget Holder 139.5 3 Widget Opener 89.27 4 Foobar Set 120.0
Vi kan bruge avg()
funktion for at få den gennemsnitlige værdi fra Pris kolonne. Sådan:
SELECT avg(Price) FROM Products;
Resultat:
184.555
Hvordan en WHERE-klausul påvirker resultatet
Hvis din forespørgsel bruger en WHERE
klausul, vil gennemsnittet blive beregnet efter WHERE
klausulen har fået virkning. Med andre ord kan du bruge en WHERE
klausul for at sikre, at avg()
funktion beregner kun de rækker, du er interesseret i.
Her er, hvad der sker, hvis jeg tilføjer en WHERE
klausul til det foregående eksempel.
SELECT avg(Price)
FROM Products
WHERE ProductName LIKE '%widget%';
Resultat:
206.073333333333
Rund resultatet
Resultatet returneres som en flydende kommaværdi (medmindre den er NULL). Du kan bruge round()
funktion til at afrunde værdien efter behov.
SELECT round(avg(Price), 2)
FROM Products
WHERE ProductName LIKE '%widget%';
Resultat:
206.07
Begrænsning af resultaterne
LIMIT
klausulen påvirker ikke beregningen af avg()
funktion – kun én række returneres med avg()
fungerer alligevel.
SELECT avg(Price)
FROM Products
LIMIT 1;
Resultat:
184.555
Når det er sagt, vil en grænse på nul resultere i, at intet returneres.
Strenge og BLOB'er
Streng- og BLOB-værdier, der ikke ligner tal, fortolkes som 0.
SELECT avg(ProductName) FROM Products;
Resultat:
0.0
NULL-argumenter
Hvis der ikke er input, der ikke er NULL, returnerer funktionen avg() NULL.
SELECT avg(NULL);
Resultat:
(Dette resultat er NULL).
Men hvis der er mindst et ikke-NULL-argument, returnerer det ikke NULL.
For at demonstrere dette vil jeg her indsætte en ny række, men lad Pris kolonne ved NULL:
INSERT INTO Products (ProductId, ProductName)
VALUES (5, 'Red Widget');
SELECT * FROM Products;
Resultat:
ProductId ProductName Price ---------- --------------------- ---------- 1 Blue Widgets (6 Pack) 389.45 2 Widget Holder 139.5 3 Widget Opener 89.27 4 Foobar Set 120.0 5 Red Widget
Så den sidste række har ikke en pris – Prisen kolonnen er NULL.
Når jeg nu bruger avg()
funktion, returnerer den stadig gennemsnittet af alle rækker, der ikke er NULL.
SELECT avg(Price) FROM Products;
Resultat:
184.555
Det SÆRLIGE søgeord
Du kan bruge DISTINCT
nøgleord for at beregne gennemsnittet af kun de forskellige værdier i kolonnen. Dette har den effekt, at alle duplikerede værdier fjernes fra beregningen.
Se Tweak your Avg()-resultater i SQLite med DISTINCT-søgeordet for et eksempel.