カテゴリ:

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

MIN

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

こちらもご覧ください:

COUNT , SUM , MAX

構文

集計関数

MIN( <expr> )
Copy

ウィンドウ関数

MIN( <expr> ) [ OVER ( [ PARTITION BY <expr1> ] [ ORDER BY <expr2> [ <window_frame> ] ] ) ]
Copy

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.

次の例は、MIN 関数の使用方法を説明しています。

テーブルとデータを作成します。

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

データを表示します。

SELECT k, d
    FROM sample_table
    ORDER BY k, d;
Copy
+------+------+
| K    | D    |
|------+------|
| 1    | 1    |
| 1    | 3    |
| 1    | 5    |
| 2    | 2    |
| 2    | NULL |
| 3    | NULL |
| NULL | 1    |
| NULL | 7    |
+------+------+

MIN 関数を使用して、 d という名前の列で最小値を取得します。

SELECT MIN(d) FROM sample_table;
Copy
+--------+                                                                      
| MIN(D) |
|--------|
| 1      |
+--------+

GROUPBY 句を MIN 関数と組み合わせて、各グループの最小値を取得します(各グループは列 k の値に基づいています)。

SELECT k, MIN(d)
  FROM sample_table 
  GROUP BY k
  ORDER BY k;
Copy
+------+--------+                                                               
| K    | MIN(D) |
|------+--------|
| 1    | 1      |
| 2    | 2      |
| 3    | NULL   |
| NULL | 1      |
+------+--------+

PARTITIONBY 句を使用して、 k の値に基づいてデータをグループに分けます。これは GROUPBY を使用した場合と似ていますが、同一ではありません。特に、 GROUPBY はグループごとに1つの出力行を生成し、 PARTITIONBY は入力行ごとに1つの出力行を生成します。

SELECT k, d, MIN(d) OVER (PARTITION BY k)
  FROM sample_table
  ORDER BY k, d;
Copy
+------+------+------------------------------+                                  
| K    | D    | MIN(D) OVER (PARTITION BY K) |
|------+------+------------------------------|
| 1    | 1    | 1                            |
| 1    | 3    | 1                            |
| 1    | 5    | 1                            |
| 2    | 2    | 2                            |
| 2    | NULL | 2                            |
| 3    | NULL | NULL                         |
| NULL | 1    | 1                            |
| NULL | 7    | 1                            |
+------+------+------------------------------+

ウィンドウ ORDERBY 句を使用して、2行幅のスライディングウィンドウを作成し、そのウィンドウ内で最小値を出力します。(ウィンドウ句の ORDER BY は、ステートメントレベルの ORDER BY とは異なります)この例では単一のパーティションを使用しているため、OVER()句にPARTITION BY句はありません。

SELECT k, d, MIN(d) OVER (ORDER BY k, d ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
  FROM sample_table
  ORDER BY k, d;
Copy
+------+------+----------------------------------------------------------------------+
| K    | D    | MIN(D) OVER (ORDER BY K, D ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) |
|------+------+----------------------------------------------------------------------|
| 1    | 1    | 1                                                                    |
| 1    | 3    | 1                                                                    |
| 1    | 5    | 3                                                                    |
| 2    | 2    | 2                                                                    |
| 2    | NULL | 2                                                                    |
| 3    | NULL | NULL                                                                 |
| NULL | 1    | 1                                                                    |
| NULL | 7    | 1                                                                    |
+------+------+----------------------------------------------------------------------+