MAX¶
expr 内の記録の最大値を返します。すべてのレコードが NULLでない限り、NULL 値は無視されます。その場合、 NULL 値が返されます。
構文¶
集計関数
MAX( <expr> )
ウィンドウ関数
MAX( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
window_frame の構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
戻り値¶
返される値のデータ型は、入力値のデータ型と同じです。
使用上の注意¶
- 他のシステムとの互換性を保つために、関数の引数として DISTINCT キーワードを指定することができますが、これは何の効果もありません。 
- 関数がウィンドウ関数として呼び出される場合、ウィンドウにはオプションの - window_frameを含めることができます。- window_frame(累積またはスライド)は、合計値が返されるウィンドウ内の行のサブセットを指定します。- window_frameが指定されていない場合、デフォルトは次の累積ウィンドウフレームです(ウィンドウ関数の ANSI 標準に従う)。- RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW- 構文や例を含むウィンドウフレームの詳細については、 ウィンドウフレームの使用上の注意 をご参照ください。 
照合の詳細¶
- The comparisons follow the collation based on the input arguments' collations and precedences. 
- The collation of the result is the same as the collation of the input. 
例¶
次の例は、MAX 関数の使用方法を説明しています。
テーブルとデータを作成します。
CREATE OR REPLACE TABLE sample_table(k CHAR(4), d CHAR(4)); INSERT INTO sample_table VALUES ('1', '1'), ('1', '5'), ('1', '3'), ('2', '2'), ('2', NULL), ('3', NULL), (NULL, '7'), (NULL, '1');データを表示します。
SELECT k, d FROM sample_table ORDER BY k, d;+------+------+ | K | D | |------+------| | 1 | 1 | | 1 | 3 | | 1 | 5 | | 2 | 2 | | 2 | NULL | | 3 | NULL | | NULL | 1 | | NULL | 7 | +------+------+MAX 関数を使用して、
dという名前の列で最大値を取得します。SELECT MAX(d) FROM sample_table;+--------+ | MAX(D) | |--------| | 7 | +--------+GROUPBY 句を MAX 関数と組み合わせて、各グループの最大値を取得します(各グループは列
kの値に基づいています)。SELECT k, MAX(d) FROM sample_table GROUP BY k ORDER BY k;+------+--------+ | K | MAX(D) | |------+--------| | 1 | 5 | | 2 | 2 | | 3 | NULL | | NULL | 7 | +------+--------+PARTITIONBY 句を使用して、
kの値に基づいてデータをグループに分けます。これは GROUPBY を使用した場合と似ていますが、同一ではありません。特に、 GROUPBY はグループごとに1つの出力行を生成し、 PARTITIONBY は入力行ごとに1つの出力行を生成します。SELECT k, d, MAX(d) OVER (PARTITION BY k) FROM sample_table ORDER BY k, d;+------+------+------------------------------+ | K | D | MAX(D) OVER (PARTITION BY K) | |------+------+------------------------------| | 1 | 1 | 5 | | 1 | 3 | 5 | | 1 | 5 | 5 | | 2 | 2 | 2 | | 2 | NULL | 2 | | 3 | NULL | NULL | | NULL | 1 | 7 | | NULL | 7 | 7 | +------+------+------------------------------+ウィンドウ ORDERBY 句を使用して、2行幅のスライディングウィンドウを作成し、そのウィンドウ内で最高値を出力します。(ウィンドウ句の ORDER BY は、ステートメントレベルの ORDER BY とは異なります)この例では単一のパーティションを使用しているため、OVER()句にPARTITION BY句はありません。
SELECT k, d, MAX(d) OVER (ORDER BY k, d ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) FROM sample_table ORDER BY k, d;+------+------+----------------------------------------------------------------------+ | K | D | MAX(D) OVER (ORDER BY K, D ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) | |------+------+----------------------------------------------------------------------| | 1 | 1 | 1 | | 1 | 3 | 3 | | 1 | 5 | 5 | | 2 | 2 | 5 | | 2 | NULL | 2 | | 3 | NULL | NULL | | NULL | 1 | 1 | | NULL | 7 | 7 | +------+------+----------------------------------------------------------------------+