- 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( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
Die detaillierte Syntax von window_frame
finden Sie unter Syntax und Verwendung von Fensterfunktionen.
Argumente¶
expr1
Dies ist ein Ausdruck, der einen numerischen Datentyp ergibt (INTEGER, FLOAT, DECIMAL usw.).
expr2
Dies ist der optionale Ausdruck, nach dem partitioniert werden soll.
expr3
Dies ist der optionale Ausdruck, nach dem in jeder Partition sortiert werden soll.
Nutzungshinweise¶
Wenn ein VARCHAR-Ausdruck übergeben wird, wandelt diese Funktion die Eingabe implizit in Gleitkommawerte um. Wenn die Umwandlung nicht ausgeführt werden kann, wird ein Fehler zurückgegeben.
Wenn diese Funktion als Fensterfunktion mit einer OVER-Klausel aufgerufen wird, die eine ORDER BY-Klausel enthält:
Ein Fensterrahmen ist erforderlich. Wenn kein Fensterrahmen explizit angegeben wird, wird der folgende implizite Fensterrahmen verwendet:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Weitere Informationen über Fensterrahmen, einschließlich Syntax, Nutzungshinweise und Beispiele, finden Sie unter Syntax und Verwendung von Fensterfunktionen.
Die Verwendung des Schlüsselworts DISTINCT innerhalb der Fensterfunktion ist nicht zulässig und führt zu einem Kompilierfehler.
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 | +---------+-----------------------------------------+