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

SQLite-Durchschnitt

Zusammenfassung :In diesem Tutorial erfahren Sie, wie Sie SQLite AVG verwenden Funktion zur Berechnung des Durchschnittswerts einer Reihe von Werten.

Einführung in die SQLite AVG-Funktion

Der AVG Die Funktion ist eine Aggregatfunktion, die den Durchschnittswert aller Nicht-NULL-Werte berechnet innerhalb einer Gruppe.

Im Folgenden wird die Syntax von AVG veranschaulicht Funktion:

AVG([ALL | DISTINCT] expression);Code language: SQL (Structured Query Language) (sql)

Standardmäßig ist der AVG Funktion verwendet ALL Klausel, ob Sie es angeben oder nicht. Das bedeutet, dass die AVG-Funktion alle Nicht-NULL-Werte verwendet, wenn sie den Durchschnittswert berechnet.

Falls Sie den Durchschnittswert unterschiedlicher (oder eindeutiger) Werte berechnen möchten, müssen Sie die DISTINCT-Klausel explizit im Ausdruck angeben.

Wenn eine Spalte gemischte Datentypen wie Integer, Real, BLOB und Text speichert, wird SQLite AVG Funktion interpretiert das BLOB, das nicht wie eine Zahl aussieht, als Null (0).

Der Wert von AVG Funktion ist immer ein Fließkommawert oder ein NULL Wert. Der AVG Funktion gibt nur ein NULL zurück Wert wenn und nur wenn alle Werte in der Gruppe sind NULL Werte.

Sie können einen kurzen Test machen, um zu sehen, wie die SQLite-Funktion mit verschiedenen Datentypen arbeitet.

Erstellen Sie zunächst eine neue Tabelle mit dem Namen avg_tests mit der folgenden Anweisung:

CREATE TABLE avg_tests (val);Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Fügen Sie als Nächstes einige gemischte Werte in avg_tests ein Tabelle.

INSERT INTO avg_tests (val)
VALUES
 (1),
 (2),
 (10.1),
 (20.5),
 ('8'),
 ('B'),
 (NULL),
 (x'0010'),
 (x'0011');Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Fragen Sie dann Daten aus avg_tests ab Tabelle.

SELECT rowid,
       val
  FROM avg_tests;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Danach können Sie den AVG verwenden Funktion, um den Durchschnitt der ersten vier Zeilen zu berechnen, die nur numerische Werte enthalten.

SELECT
	avg(val)
FROM
	avg_tests
WHERE
	rowid < 5;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Wenden Sie abschließend den AVG an Funktion auf alle Werte in val Spalte der avg_tests Tabelle.

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Sie haben 9 Zeilen in den avg_tests Tisch. Die Zeile 7 ist NULL . Daher wird bei der Berechnung des Durchschnitts der AVG Funktion ignoriert es und nimmt 8 Zeilen in die Berechnung auf.

Die ersten vier Zeilen sind die ganzzahligen und reellen Werte:1,2, 10,1 und 20,5. Die SQLite AVG-Funktion verwendet diese Werte in der Berechnung.

Die 5. und 6. Reihe sind Texttypen, weil wir die als „B“ und „8“ eingefügt haben. Da 8 wie eine Zahl aussieht, interpretiert SQLite B als 0 und „8“ als 8.

Die 8. und 9. Reihe sind BLOB Typen, die nicht wie Zahlen aussehen, daher interpretiert SQLite diese Werte als 0.

Der AVG(cal) Ausdruck verwendet die folgende Formel:

AVG(val) = (1 + 2 + 10.1 + 20.5 + 8 + 0 + 0 + 0 )/ 8 = 5.2Code language: SQL (Structured Query Language) (sql)

Mal sehen, wie der DISTINCT Klausel funktioniert.

Fügen Sie zuerst eine neue Zeile in avg_tests ein Tabelle mit einem Wert existiert bereits.

INSERT INTO avg_tests (val)
VALUES (10.1);Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Wenden Sie zweitens den AVG an Funktion ohne DISTINCT Klausel:

SELECT
	avg(val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Drittens fügen Sie den DISTINCT hinzu -Klausel zum AVG Funktion:

SELECT
	avg(DISTINCT val)
FROM
	avg_tests;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Da die avg_tests Tabelle hat zwei Zeilen mit demselben Wert 10.1, dem AVG(DISTINCT) nimmt nur die eine Zeile zur Berechnung. Daher haben Sie ein anderes Ergebnis erhalten.

SQLite AVG Funktion Praxisbeispiele

Wir werden die tracks verwenden Tabelle in der Beispieldatenbank für die Demonstration.

Um die durchschnittliche Länge aller Tracks in Millisekunden zu berechnen, verwenden Sie die folgende Anweisung:

SELECT
	avg(milliseconds)
FROM
	tracks;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

SQLite AVG-Funktion mit GROUP BY Klausel

Um die durchschnittliche Länge der Titel für jedes Album zu berechnen, verwenden Sie den AVG Funktion mit dem GROUP BY Klausel.

Zuerst das GROUP BY -Klausel gruppiert eine Reihe von Titeln nach Alben. Dann der AVG Funktion berechnet die durchschnittliche Länge der Tracks für jedes Album.

Siehe folgende Anweisung.

SELECT
	albumid,
	avg(milliseconds)
FROM
	tracks
GROUP BY
	albumid;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

SQLite AVG Funktion mit INNER JOIN Klauselbeispiel

Um den Albumtitel zusammen mit der albumid zu erhalten -Spalte verwenden Sie die INNER JOIN-Klausel in der obigen Anweisung wie die folgende Abfrage:

SELECT
	tracks.AlbumId,
	Title,
	round(avg(Milliseconds), 2) avg_length
FROM
	tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
	tracks.albumid;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

Beachten Sie, dass wir den ROUND verwendet haben Funktion, um den Gleitkommawert auf 2 Stellen rechts vom Dezimalkomma zu runden.

Beispiel für SQLite-AVG-Funktion mit HAVING-Klausel

Sie können entweder den AVG verwenden Funktion oder den Alias ​​ihrer Spalte in der HAVING-Klausel, um Gruppen zu filtern. Die folgende Anweisung ruft nur die Alben ab, deren durchschnittliche Länge zwischen 100000 und 200000 liegt.

SELECT
	tracks.albumid,
	title,
	round(avg(milliseconds),2)  avg_leng
FROM
	tracks
INNER JOIN albums ON albums.AlbumId = tracks.albumid
GROUP BY
	tracks.albumid
HAVING
	avg_leng BETWEEN 100000 AND 200000;Code language: SQL (Structured Query Language) (sql)

Probieren Sie es aus

In diesem Tutorial haben wir Ihnen gezeigt, wie Sie SQLite AVG verwenden Funktion zur Berechnung der Durchschnittswerte von Nicht-NULL-Werten in einer Gruppe.