카테고리:

집계 함수 (일반) , 윈도우 함수 (윈도우 프레임)

MIN / MAX

expr 내의 레코드에 대한 최솟값 또는 최댓값을 반환합니다. 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> ] ] ) ]

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.

다음 코드는 MINMAX 사용법을 보여줍니다.

테이블과 데이터를 만듭니다.

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

MINMAX 함수를 사용하여, 《d》라는 열에서 가장 작은 값과 가장 큰 값을 검색합니다.

SELECT MIN(d), MAX(d) FROM minmax_example;
+--------+--------+
| MIN(D) | MAX(D) |
|--------+--------|
| 1      | 7      |
+--------+--------+

GROUP BY 절을 MINMAX 함수와 결합하여, 각 그룹에서 가장 작은 값과 가장 큰 값을 검색합니다(여기서 각 그룹은 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 는 그룹당 하나의 출력 행을 생성하는 반면, PARTITION BY 는 입력 행당 하나의 출력 행을 생성합니다.

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                                                                    |
+------+------+----------------------------------------------------------------------+
맨 위로 이동