sql >> Database >  >> RDS >> SQLite

Hoe SQLite Avg() werkt

De SQLite avg() functie retourneert de gemiddelde waarde van alle niet-NULL-waarden binnen een groep.

Het accepteert één argument, namelijk de waarde of groep van waarden.

Voorbeeld

Neem de volgende 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     

We kunnen de avg() . gebruiken functie om de gemiddelde waarde te halen uit de Prijs kolom. Zoals dit:

SELECT avg(Price) FROM Products;

Resultaat:

184.555

Hoe een WHERE-clausule het resultaat beïnvloedt

Als uw zoekopdracht een WHERE . gebruikt clausule, wordt het gemiddelde berekend na de WHERE clausule in werking is getreden. Met andere woorden, u kunt een WHERE . gebruiken clausule om ervoor te zorgen dat de avg() functie berekent alleen die rijen waarin u geïnteresseerd bent.

Dit is wat er gebeurt als ik een WHERE . toevoeg clausule naar het vorige voorbeeld.

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

Resultaat:

206.073333333333

Het resultaat afronden

Het resultaat wordt geretourneerd als een drijvende-kommawaarde (tenzij het NULL is). U kunt de round() . gebruiken functie om de waarde naar wens af te ronden.

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

Resultaat:

206.07

De resultaten beperken

De LIMIT clausule heeft geen invloed op de berekening van de avg() functie – er wordt slechts één rij geretourneerd met de avg() hoe dan ook functioneren.

SELECT avg(Price) 
FROM Products
LIMIT 1;

Resultaat:

184.555

Dat gezegd hebbende, zal het opgeven van een limiet van nul ertoe leiden dat er niets wordt geretourneerd.

Strings en BLOB's

String- en BLOB-waarden die niet op getallen lijken, worden geïnterpreteerd als 0.

SELECT avg(ProductName) FROM Products;

Resultaat:

0.0

NULL-argumenten

Als er geen niet-NULL-invoer is, retourneert de functie avg() NULL.

SELECT avg(NULL);

Resultaat:

 

(Dat resultaat is NULL).

Als er echter ten minste één niet-NULL-argument is, wordt er geen NULL geretourneerd.

Om dit te demonstreren, zal ik hier een nieuwe rij invoegen, maar laat de Prijs kolom op NULL:

INSERT INTO Products (ProductId, ProductName) 
VALUES (5, 'Red Widget');
SELECT * FROM Products;

Resultaat:

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                       

Dus de laatste rij heeft geen prijs - de Prijs kolom is NULL.

Als ik nu de avg() . gebruik functie, retourneert het nog steeds het gemiddelde van alle niet-NULL-rijen.

SELECT avg(Price) FROM Products;

Resultaat:

184.555

Het DISTINCT-zoekwoord

U kunt de DISTINCT . gebruiken trefwoord om het gemiddelde van alleen de afzonderlijke waarden in de kolom te berekenen. Dit heeft tot gevolg dat eventuele dubbele waarden uit de berekening worden verwijderd.

Zie Tweak your Avg() Results in SQLite met het DISTINCT Trefwoord voor een voorbeeld.


  1. Hoe MySQL-implementaties te bewaken met Prometheus &Grafana op ScaleGrid

  2. PolyScale.ai – MySQL en PostgreSQL schalen met wereldwijde caching

  3. Hoe zie ik actieve SQL Server-verbindingen?

  4. Oracle SQL retourneert rijen op willekeurige wijze wanneer er geen order by-clausule wordt gebruikt