MIN / MAX¶
expr
내의 레코드에 대한 최솟값 또는 최댓값을 반환합니다. NULL 값은 무시됩니다. 단, 모든 레코드가 NULL인 경우에는 NULL 값이 반환됩니다.
구문¶
집계 함수
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.
예¶
다음 코드는 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 ORDER BY k, d; +------+------+ | K | D | |------+------| | 1 | 1 | | 1 | 3 | | 1 | 5 | | 2 | 2 | | 2 | NULL | | 3 | NULL | | NULL | 1 | | NULL | 7 | +------+------+
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
는 그룹당 하나의 출력 행을 생성하는 반면,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 | +------+------+----------------------------------------------------------------------+