カテゴリ:

集計関数 (General) , ウィンドウ関数

MAX

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

こちらもご覧ください:

COUNTSUMMIN

構文

集計関数

MAX( <expr> )

ウィンドウ関数

MAX( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <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      |
+------+--------+

Use a PARTITION BY clause to break the data into groups based on the value of k. This is similar to, but not identical to, using GROUP BY. In particular, GROUP BY produces one output row per group, while PARTITION BY produces one output row per input row.

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