sql >> Databasteknik >  >> RDS >> SQLite

Hur SQLite Avg() fungerar

SQLite avg() funktion returnerar medelvärdet för alla icke-NULL-värden inom en grupp.

Den accepterar ett argument, vilket är värdet eller gruppen av värden.

Exempel

Ta följande tabell:

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 använda avg() funktion för att få medelvärdet från Pris kolumn. Så här:

SELECT avg(Price) FROM Products;

Resultat:

184.555

Hur en WHERE-klausul påverkar resultatet

Om din fråga använder en WHERE sats, kommer genomsnittet att beräknas efter WHERE klausulen har trätt i kraft. Med andra ord kan du använda en WHERE sats för att säkerställa att avg() funktionen beräknar bara de rader du är intresserad av.

Så här händer om jag lägger till en WHERE klausul till föregående exempel.

SELECT avg(Price) 
FROM Products
WHERE ProductName LIKE '%widget%';

Resultat:

206.073333333333

Runda resultatet

Resultatet returneras som ett flyttalsvärde (såvida det inte är NULL). Du kan använda round() funktion för att avrunda värdet efter behov.

SELECT round(avg(Price), 2)
FROM Products
WHERE ProductName LIKE '%widget%';

Resultat:

206.07

Begränsa resultaten

LIMIT satsen påverkar inte beräkningen av avg() funktion – endast en rad returneras med avg() fungerar ändå.

SELECT avg(Price) 
FROM Products
LIMIT 1;

Resultat:

184.555

Som sagt, att tillhandahålla en gräns på noll kommer att resultera i att ingenting returneras.

Strängar och BLOB

Sträng- och BLOB-värden som inte ser ut som siffror tolkas som 0.

SELECT avg(ProductName) FROM Products;

Resultat:

0.0

NULL-argument

Om det inte finns några icke-NULL-ingångar, returnerar funktionen avg() NULL.

SELECT avg(NULL);

Resultat:

 

(Det resultatet är NULL).

Men om det finns minst ett argument som inte är NULL, kommer det inte att returnera NULL.

För att visa detta infogar jag en ny rad här, men lämnar Pris kolumn vid 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 sista raden har inget pris – Priset kolumnen är NULL.

Nu när jag använder avg() funktion, returnerar den fortfarande medelvärdet av alla rader som inte är NULL.

SELECT avg(Price) FROM Products;

Resultat:

184.555

Det DISTINKTA sökordet

Du kan använda DISTINCT nyckelord för att beräkna genomsnittet av bara de distinkta värdena i kolumnen. Detta har effekten att alla dubbletter av värden tas bort från beräkningen.

Se Justera dina Avg()-resultat i SQLite med nyckelordet DISTINCT för ett exempel.


  1. Hur man aktiverar allmänna loggar och felloggar i AWS RDS

  2. Hur man byter namn på en SQL Server-databas med T-SQL

  3. NULL Complexities – Del 2

  4. rails + MySQL på OSX:Biblioteket är inte laddat:libmysqlclient.18.dylib