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.