MAX
MAX (최댓값)
expr 안의 레코드에 대한 최댓값을 반환해요. 모든 레코드가 NULL이 아니면 NULL 값은 무시되며, 모든 레코드가 NULL이면 NULL 값이 반환돼요.
본문
구문
집계 함수:
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. 윈도우 프레임에 대한 구문과 예시를 포함한 자세한 내용은 윈도우 프레임 사용 참고 사항을 참고해요.
데이터 정렬(collation) 상세
- 비교는 입력 인자들의 데이터 정렬과 우선 순위를 기반으로 하는 데이터 정렬을 따르요.
- 결과의 데이터 정렬은 입력의 데이터 정렬과 같아요.
예시
다음 예시는 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 |
+--------+
GROUP BY 절과 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 |
+------+--------+
PARTITION BY 절을 사용해 k 값을 기준으로 데이터를 그룹으로 나눠요. 이는 GROUP BY와 비슷하지만 동일하지 않아요. 특히 GROUP BY는 그룹당 출력 행 하나를 만들지만, PARTITION BY는 입력 행당 출력 행 하나를 만들어요.
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 |
+------+------+------------------------------+
윈도잉 ORDER BY 절을 사용해 두 행 너비의 이동 윈도우를 만들고, 그 윈도우 안의 가장 높은 값을 출력해요. (윈도잉 절의 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 |
+------+------+----------------------------------------------------------------------+