카테고리:

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

MAX

expr 내의 레코드에 대한 최대값을 반환합니다. NULL 값은 무시됩니다. 단, 모든 레코드가 NULL인 경우에는 NULL 값이 반환됩니다.

참고 항목:

COUNT , SUM , MIN

구문

집계 함수

MAX( <expr> )
Copy

윈도우 함수

MAX( <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.

다음 예는 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');
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    |
+------+------+

MAX 함수를 사용하여 d 라는 열에서 가장 큰 값을 검색합니다.

SELECT MAX(d) FROM sample_table;
Copy
+--------+                                                                      
| MAX(D) |
|--------|
| 7      |
+--------+

GROUP BY 절을 MAX 함수와 결합하여 각 그룹에서 가장 큰 값을 검색합니다(여기서 각 그룹은 k 열 값을 기반으로 함).

SELECT k, MAX(d)
  FROM sample_table 
  GROUP BY k
  ORDER BY k;
Copy
+------+--------+                                                               
| 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;
Copy
+------+------+------------------------------+                                  
| 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 sample_table
  ORDER BY k, d;
Copy
+------+------+----------------------------------------------------------------------+
| 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                                                                    |
+------+------+----------------------------------------------------------------------+