- 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 | +---------+-----------------------------------------+