MIN / MAX¶
expr
内のレコードの最小値または最大値を返します。すべてのレコードが NULLでない限り、NULL 値は無視されます。その場合、 NULL 値が返されます。
構文¶
集計関数
MAX( <expr> )
MIN( <expr> )
ウィンドウ関数
MAX( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
MIN( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
window_frame
構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。
戻り値¶
返される値のデータ型は、入力値のデータ型と同じです。
使用上の注意¶
他のシステムとの互換性のために、 DISTINCT キーワードを MIN または MAX の引数として指定できますが、効果はありません。
関数がウィンドウ関数として呼び出される場合、ウィンドウにはオプションの
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.
例¶
次のコードは、 MIN
および MAX
の使用方法を示しています。
テーブルとデータを作成します。
CREATE OR REPLACE TABLE minmax_example(k CHAR(4), d CHAR(4)); INSERT INTO minmax_example VALUES ('1', '1'), ('1', '5'), ('1', '3'), ('2', '2'), ('2', NULL), ('3', NULL), (NULL, '7'), (NULL, '1');データを表示します。
SELECT k, d FROM minmax_example ORDER BY k, d; +------+------+ | K | D | |------+------| | 1 | 1 | | 1 | 3 | | 1 | 5 | | 2 | 2 | | 2 | NULL | | 3 | NULL | | NULL | 1 | | NULL | 7 | +------+------+
MIN
およびMAX
関数を使用して、「d」という名前の列の最小値と最大値を取得します。SELECT MIN(d), MAX(d) FROM minmax_example; +--------+--------+ | MIN(D) | MAX(D) | |--------+--------| | 1 | 7 | +--------+--------+
GROUP BY
句をMIN
およびMAX
関数と組み合わせて、各グループの最小値と最大値を取得します(各グループは列k
の値に基づいています)。SELECT k, MIN(d), MAX(d) FROM minmax_example GROUP BY k ORDER BY k; +------+--------+--------+ | K | MIN(D) | MAX(D) | |------+--------+--------| | 1 | 1 | 5 | | 2 | 2 | 2 | | 3 | NULL | NULL | | NULL | 1 | 7 | +------+--------+--------+
PARTITION BY
句を使用して、kの値に基づいてデータをグループに分けます。これはGROUP BY
を使用した場合と似ていますが、同一ではありません。特に、GROUP BY
はグループごとに1つの出力行を生成し、PARTITION BY
は入力行ごとに1つの出力行を生成します。SELECT k, d, MAX(d) OVER (PARTITION BY k) FROM minmax_example 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 | +------+------+------------------------------+ウィンドウ化
ORDER BY
句を使用して、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 minmax_example 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 | +------+------+----------------------------------------------------------------------+