Kategorien:

Aggregatfunktionen (Allgemein), Fensterfunktionen (Allgemein, Fensterrahmen)

AVG

Gibt den Durchschnitt der Nicht-NULL-Datensätze zurück. Wenn alle Datensätze in einer Gruppe NULL sind, gibt die Funktion NULL zurück.

Syntax

Aggregatfunktion

AVG( [ DISTINCT ] <expr1> )

Fensterfunktionen

AVG( <expr1> ) OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ] )

Weitere Informationen zur Syntax von Fensterrahmen finden Sie unter Fensterrahmensyntax und Verwendung.

Argumente

Ausdruck1

Dies ist ein Ausdruck, der einen numerischen Datentyp ergibt (INTEGER, FLOAT, DECIMAL usw.).

Ausdruck2

Dies ist der optionale Ausdruck, nach dem partitioniert werden soll.

Ausdruck3

Dies ist der optionale Ausdruck, nach dem in jeder Partition sortiert werden soll.

Nutzungshinweise

  • AVG für einen STRING-Ausdruck führt zu einer impliziten Umwandlung der Eingabewerte in Gleitkommawerte. Wenn die Umwandlung nicht ausgeführt werden kann, wird ein Fehler zurückgegeben.

  • Beim Aufruf als Fensterfunktion:

    • Das Schlüsselwort DISTINCT ist syntaktisch zulässig, wird jedoch ignoriert.

    • Wenn in der OVER-Klausel eine ORDER BY-Unterklausel verwendet wird, muss ein Fensterrahmen verwendet werden. Wenn kein Fensterrahmen angegeben ist, ist der Standard ein kumulativer Fensterrahmen:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      Weitere Informationen zu Fensterrahmen, einschließlich Syntax und Beispielen, finden Sie unter Fensterrahmensyntax und Verwendung.

      Weitere Informationen zu impliziten Fensterrahmen finden Sie unter Hinweise zur Nutzung von Fensterrahmen.

Beispiele

Einrichtung:

CREATE OR REPLACE TABLE avg_example(int_col int, d decimal(10,5), s1 varchar(10), s2 varchar(10));
INSERT INTO avg_example VALUES
    (1, 1.1, '1.1','one'), 
    (1, 10, '10','ten'),
    (2, 2.4, '2.4','two'), 
    (2, NULL, NULL, 'NULL'),
    (3, NULL, NULL, 'NULL'),
    (NULL, 9.9, '9.9','nine');

Anzeigen der Daten:

SELECT * 
    FROM avg_example 
    ORDER BY int_col, d;
+---------+----------+------+------+
| INT_COL |        D | S1   | S2   |
|---------+----------+------+------|
|       1 |  1.10000 | 1.1  | one  |
|       1 | 10.00000 | 10   | ten  |
|       2 |  2.40000 | 2.4  | two  |
|       2 |     NULL | NULL | NULL |
|       3 |     NULL | NULL | NULL |
|    NULL |  9.90000 | 9.9  | nine |
+---------+----------+------+------+

Berechnen Sie den Durchschnitt der Spalten, die numerisch sind oder in Zahlen umgewandelt werden können:

SELECT AVG(int_col), AVG(d)
    FROM avg_example;
+--------------+---------------+
| AVG(INT_COL) |        AVG(D) |
|--------------+---------------|
|     1.800000 | 5.85000000000 |
+--------------+---------------+

Kombinieren Sie AVG mit GROUP BY, um die Durchschnittswerte verschiedener Gruppen zu berechnen:

SELECT int_col, AVG(d), AVG(s1) 
    FROM avg_example 
    GROUP BY int_col
    ORDER BY int_col;
+---------+---------------+---------+
| INT_COL |        AVG(D) | AVG(S1) |
|---------+---------------+---------|
|       1 | 5.55000000000 |    5.55 |
|       2 | 2.40000000000 |    2.4  |
|       3 |          NULL |    NULL |
|    NULL | 9.90000000000 |    9.9  |
+---------+---------------+---------+

Verwendung als einfache Fensterfunktion:

SELECT 
       int_col,
       AVG(int_col) OVER(PARTITION BY int_col) 
    FROM avg_example
    ORDER BY int_col;
+---------+-----------------------------------------+
| INT_COL | AVG(INT_COL) OVER(PARTITION BY INT_COL) |
|---------+-----------------------------------------|
|       1 |                                   1.000 |
|       1 |                                   1.000 |
|       2 |                                   2.000 |
|       2 |                                   2.000 |
|       3 |                                   3.000 |
|    NULL |                                    NULL |
+---------+-----------------------------------------+