SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Wie SQLite Avg() funktioniert

Das SQLite avg() Funktion gibt den Durchschnittswert aller Nicht-NULL-Werte innerhalb einer Gruppe zurück.

Es akzeptiert ein Argument, das der Wert oder die Gruppe von Werten ist.

Beispiel

Nehmen Sie die folgende Tabelle:

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     

Wir können den avg() verwenden Funktion, um den Durchschnittswert aus dem Preis zu erhalten Säule. So:

SELECT avg(Price) FROM Products;

Ergebnis:

184.555

Wie eine WHERE-Klausel das Ergebnis beeinflusst

Wenn Ihre Abfrage ein WHERE verwendet -Klausel wird der Durchschnitt nach dem WHERE berechnet Klausel in Kraft getreten. Mit anderen Worten, Sie können ein WHERE verwenden -Klausel, um sicherzustellen, dass die avg() berechnet nur die Zeilen, die Sie interessieren.

Folgendes passiert, wenn ich ein WHERE hinzufüge Klausel zum vorherigen Beispiel.

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

Ergebnis:

206.073333333333

Runde das Ergebnis

Das Ergebnis wird als Fließkommawert zurückgegeben (sofern es nicht NULL ist). Sie können die round() verwenden Funktion, um den Wert nach Bedarf zu runden.

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

Ergebnis:

206.07

Einschränkung der Ergebnisse

Das LIMIT -Klausel wirkt sich nicht auf die Berechnung von avg() aus Funktion – nur eine Zeile wird mit dem avg() zurückgegeben funktionieren trotzdem.

SELECT avg(Price) 
FROM Products
LIMIT 1;

Ergebnis:

184.555

Wenn Sie jedoch ein Limit von Null angeben, wird nichts zurückgegeben.

Strings und BLOBs

String- und BLOB-Werte, die nicht wie Zahlen aussehen, werden als 0 interpretiert.

SELECT avg(ProductName) FROM Products;

Ergebnis:

0.0

NULL-Argumente

Wenn es keine Nicht-NULL-Eingaben gibt, gibt die avg()-Funktion NULL zurück.

SELECT avg(NULL);

Ergebnis:

 

(Das Ergebnis ist NULL).

Wenn jedoch mindestens ein Nicht-NULL-Argument vorhanden ist, wird NULL nicht zurückgegeben.

Um dies zu demonstrieren, füge ich hier eine neue Zeile ein, belasse aber den Preis Spalte bei NULL:

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

Ergebnis:

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                       

Die letzte Zeile hat also keinen Preis – den Preis Spalte ist NULL.

Wenn ich jetzt den avg() verwende -Funktion gibt sie dennoch den Durchschnitt aller Nicht-NULL-Zeilen zurück.

SELECT avg(Price) FROM Products;

Ergebnis:

184.555

Das Schlüsselwort DISTINCT

Sie können den DISTINCT verwenden Schlüsselwort, um den Durchschnitt nur der unterschiedlichen Werte in der Spalte zu berechnen. Dadurch werden alle doppelten Werte aus der Berechnung entfernt.

Ein Beispiel finden Sie unter Optimieren Sie Ihre Avg()-Ergebnisse in SQLite mit dem Schlüsselwort DISTINCT.