カテゴリ:

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

MIN / MAX

内のレコードの最小値または最大値を返します。すべてのレコードが NULLでない限り、NULL 値は無視されます。その場合、 NULL 値が返されます。

こちらもご覧ください

COUNT , SUM

構文

集計関数

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> ] ] ) ]

ウィンドウフレーム 構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。

戻り値

返される値のデータ型は、入力値のデータ型と同じです。

使用上の注意

  • 他のシステムとの互換性のために、 DISTINCT キーワードを MIN または MAX の引数として指定できますが、効果はありません。

  • 関数がウィンドウ関数として呼び出される場合、ウィンドウにはオプションの ウィンドウフレーム を含めることができます。 ウィンドウフレーム (累積またはスライド)は、合計値が返されるウィンドウ内の行のサブセットを指定します。 ウィンドウフレーム が指定されていない場合、デフォルトは次の累積ウィンドウフレームです(ウィンドウ関数の 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;

出力:

+------+------+
| K    | D    |
|------+------|
| 1    | 1    |
| 1    | 5    |
| 1    | 3    |
| 2    | 2    |
| 2    | NULL |
| 3    | NULL |
| NULL | 7    |
| NULL | 1    |
+------+------+

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;

出力:

+------+------+------------------------------+
| K    | D    | MAX(D) OVER (PARTITION BY K) |
|------+------+------------------------------|
| 1    | 1    | 5                            |
| 1    | 5    | 5                            |
| 1    | 3    | 5                            |
| 2    | 2    | 2                            |
| 2    | NULL | 2                            |
| 3    | NULL | NULL                         |
| NULL | 7    | 7                            |
| NULL | 1    | 7                            |
+------+------+------------------------------+

ウィンドウ化 ORDER BY 句を使用して、2行幅のスライディングウィンドウを作成し、そのウィンドウ内で最高値を出力します。(ウィンドウ句の ORDER BY は、ステートメントレベルの ORDER BY とは異なります)

SELECT k, d, MAX(d) OVER (ORDER BY k ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  FROM minmax_example;

出力:

+------+------+-------------------------------------------------------------------+
| K    | D    | MAX(D) OVER (ORDER BY K ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) |
|------+------+-------------------------------------------------------------------|
| 1    | 1    | 1                                                                 |
| 1    | 5    | 5                                                                 |
| 1    | 3    | 5                                                                 |
| 2    | 2    | 3                                                                 |
| 2    | NULL | 2                                                                 |
| 3    | NULL | NULL                                                              |
| NULL | 7    | 7                                                                 |
| NULL | 1    | 7                                                                 |
+------+------+-------------------------------------------------------------------+