类别:

聚合函数 (通用)、 窗口函数 (窗口框架)

MIN

返回 expr 中的记录的最小值。忽略 NULL 值,除非所有记录均为 NULL,在这种情况下,返回 NULL 值。

另请参阅:

COUNTSUMMAX

语法

聚合函数

MIN( <expr> )
Copy

窗口函数

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

有关 window_frame 语法的详细信息,请参阅 窗口框架语法和用法

返回

返回值的数据类型与输入值的数据类型相同。

使用说明

  • 为了与其他系统兼容,您可以将 DISTINCT 关键字指定为函数的实参,但该关键字没有任何作用。

  • 如果该函数作为窗口函数被调用,则窗口可以包含可选的 window_framewindow_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      |
+--------+

将 GROUP BY 子句与 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      |
+------+--------+

使用 PARTITION BY 子句,根据 k 的值将数据分成几组。此用法类似于使用 GROUP BY,但不完全相同。特别是,GROUP BY 为每组生成一个输出行,而 PARTITION BY 为每个输入行生成一个输出行。

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

使用窗口 ORDER BY 子句创建两行宽的滑动窗口,并输出该窗口内的最小值。(请记住,窗口子句中的 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                                                                    |
+------+------+----------------------------------------------------------------------+
语言: 中文