PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

AVG()-Funktion in PostgreSQL

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.