In PostgreSQL der AVG()
berechnet den Durchschnitt (arithmetisches Mittel) aller Nicht-Null-Eingabewerte und gibt das Ergebnis zurück.
Beispiel
Hier ist ein kurzes Beispiel, um zu demonstrieren, wie es funktioniert:
SELECT AVG(amount)
FROM payment;
Ergebnis:
4.2006673312979002
In diesem Fall amount
ist eine Spalte in der payment
Tisch.
Um dem etwas mehr Kontext zu geben, hier ist ein Schnappschuss der Tabelle (aus der pagila
Beispieldatenbank):
+------------+-------------+----------+-----------+--------+----------------------------+ | payment_id | customer_id | staff_id | rental_id | amount | payment_date | +------------+-------------+----------+-----------+--------+----------------------------+ | 16050 | 269 | 2 | 7 | 1.99 | 2017-01-24 21:40:19.996577 | | 16051 | 269 | 1 | 98 | 0.99 | 2017-01-25 15:16:50.996577 | | 16052 | 269 | 2 | 678 | 6.99 | 2017-01-28 21:44:14.996577 | | 16053 | 269 | 2 | 703 | 0.99 | 2017-01-29 00:58:02.996577 | | 16054 | 269 | 1 | 750 | 4.99 | 2017-01-29 08:10:06.996577 | | 16055 | 269 | 2 | 1099 | 2.99 | 2017-01-31 12:23:14.996577 | | 16056 | 270 | 1 | 193 | 1.99 | 2017-01-26 05:10:14.996577 | | 16057 | 270 | 1 | 1040 | 4.99 | 2017-01-31 04:03:42.996577 | | 16058 | 271 | 1 | 1096 | 8.99 | 2017-01-31 11:59:15.996577 | ...
Wir können den amount
sehen Spalte, für die wir den Durchschnitt berechnet haben.
Die Tabelle enthält viel mehr Zeilen, aber hier sehen Sie ein Beispiel für die Werte.
Gefilterte Ergebnisse
Der AVG()
Die Funktion arbeitet mit den von der Abfrage zurückgegebenen Zeilen. Wenn Sie also die Ergebnisse filtern, wird das Ergebnis von AVG()
angezeigt wird das widerspiegeln.
Lassen Sie uns die Ergebnisse filtern:
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Ergebnis:
3.8233333333333333
Diesmal haben wir also den Durchschnitt aller von Kunde 271 bezahlten Beträge.
Der DISTINCT
Schlüsselwort
Sie können den DISTINCT
verwenden Schlüsselwort mit AVG()
nur unterschiedliche Werte zu berechnen. Das heißt, wenn doppelte Werte vorhanden sind, werden sie als ein Wert behandelt.
Beispiel:
SELECT
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Ergebnis:
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
In diesem Fall gibt es einen sehr großen Unterschied zwischen den eindeutigen und den nicht eindeutigen Ergebnissen. Dies deutet darauf hin, dass in dieser Spalte viele doppelte Werte vorhanden sind.
Um dies zu überprüfen, können wir die unterschiedlichen Werte wie folgt ausgeben:
SELECT DISTINCT amount
FROM payment;
Ergebnis:
+--------+ | amount | +--------+ | 1.99 | | 3.98 | | 7.99 | | 5.99 | | 10.99 | | 2.99 | | 8.97 | | 8.99 | | 3.99 | | 9.98 | | 11.99 | | 7.98 | | 6.99 | | 0.00 | | 4.99 | | 5.98 | | 0.99 | | 1.98 | | 9.99 | +--------+ (19 rows)
Unser Beispiel hat also den Durchschnitt dieser unterschiedlichen Werte zurückgegeben.