カテゴリ:

集計関数 (一般)、 ウィンドウ関数 (一般、ウィンドウフレーム)

AVG

NULL 以外のレコードの平均を返します。グループ内のすべてのレコードが NULLの場合、関数は NULLを返します。

構文

集計関数

AVG( [ DISTINCT ] <expr1> ) 
Copy

ウィンドウ関数

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

window_frame の構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。

引数

expr1

これは、数値データ型(INTEGER、 FLOAT、 DECIMALなど)に評価される式です。

expr2

これは、パーティションを分割するオプションの式です。

expr3

これは、各パーティション内で並べ替えるオプションの式です。

使用上の注意

  • VARCHAR 式が渡されると、この関数は入力を暗黙的に浮動小数点値にキャストします。キャストを実行できない場合、エラーが返されます。

  • この関数が、 ORDER BY 句を含む OVER 句を持つウィンドウ関数として呼び出される場合:

    • ウィンドウフレームが必要です。ウィンドウフレームが明示的に指定されていない場合、次のような暗黙のウィンドウフレームが使用されます。

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      構文、使用上の注意、例を含むウィンドウフレームの詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。

    • ウィンドウ関数内でキーワード DISTINCT を使用することは禁止されており、コンパイル時間エラーが発生します。

セットアップ:

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'); 
Copy

データを表示します。

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

数値の列または数値に変換できる列の平均を計算します。

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

AVGGROUP BY を組み合わせて、さまざまなグループの平均を計算します。

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

単純なウィンドウ関数として使用します。

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