sql >> Database teknologi >  >> RDS >> SQLite

Sådan fungerer SQLite Avg()

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.


  1. Oracle-XMLTYPE:Sådan opdaterer du en værdi

  2. Sådan gemmer du et MySQL-forespørgselsresultat i en .CSV-fil

  3. Sådan giver du adgang til v$-visninger (v$session ,v$instance)

  4. Sådan forespørges JSON-kolonnen i MySQL