ARRAY_MAX

ARRAY_MAX

ARRAY_MAX() 함수는 입력 ARRAY에서 SQL NULL이 아닌 가장 큰 값을 가진 요소를 반환해요. 입력 ARRAY가 비어 있거나 SQL NULL 요소만 포함하면 이 함수는 NULL을 반환해요.

출처: Snowflake SQL Reference

본문

문법

ARRAY_MAX( <array> )

인자

array — 입력 ARRAY예요.

반환

이 함수는 SQL NULL이 아닌 가장 큰 값을 가진 요소를 담은 VARIANT를 반환해요.

array가 NULL이거나, 비어 있거나, SQL NULL 요소만 포함하면 함수는 NULL을 반환해요.

사용 노트

  • SQL NULL은 반정형 데이터의 명시적 null 값(예: JSON 데이터의 JSON null)과 구별돼요. 명시적 null 값은 가장 큰 값을 가진 요소를 식별할 때 고려돼요.
  • 함수는 배열의 요소를 비교해 반환할 요소를 결정해요. 함수는 같은 데이터 타입의 요소나 다음 데이터 타입의 요소 비교를 지원해요.
    • NUMBER와 FLOAT 데이터 타입의 요소.
    • TIMESTAMP_LTZ와 TIMESTAMP_TZ 데이터 타입의 요소.
  • 배열에 다른 데이터 타입의 요소가 있으면 아래 예제처럼 요소를 공통 데이터 타입으로 캐스팅하세요.

예제

다음 예제는 ARRAY 상수에서 가장 큰 값의 요소를 담은 VARIANT를 반환해요:

SELECT ARRAY_MAX([20, 0, NULL, 10, NULL]);
+------------------------------------+
| ARRAY_MAX([20, 0, NULL, 10, NULL]) |
|------------------------------------|
| 20                                 |
+------------------------------------+

다음 예제는 JSON null이 SQL NULL과 다르게 처리됨을 보여줘요. array가 JSON null을 포함하면 함수는 JSON null을 반환해요.

SELECT ARRAY_MAX([NULL, PARSE_JSON('null'), NULL]);
+--------------------------------------------------+
| ARRAY_MAX([20, 0, PARSE_JSON('NULL'), 10, NULL]) |
|--------------------------------------------------|
| null                                             |
+--------------------------------------------------+

다음 예제는 입력 ARRAY가 비어 있으면 함수가 NULL을 반환하는 것을 보여줘요:

SELECT ARRAY_MAX([]);
+---------------+
| ARRAY_MAX([]) |
|---------------|
| NULL          |
+---------------+

다음 예제는 입력 ARRAY가 SQL NULL만 포함하면 함수가 NULL을 반환하는 것을 보여줘요:

SELECT ARRAY_MAX([NULL, NULL, NULL]);
+-------------------------+
| ARRAY_MAX([NULL, NULL]) |
|-------------------------|
| NULL                    |
+-------------------------+

서로 다른 데이터 타입의 요소를 가진 배열의 최대값을 구하려면 요소를 같은 데이터 타입으로 캐스팅하세요. 다음 예제는 배열의 최대값을 구하기 위해 DATE 요소를 TIMESTAMP 요소로 캐스팅해요:

SELECT ARRAY_MAX([date1::TIMESTAMP, timestamp1]) AS array_max
  FROM (
      VALUES ('1999-01-01'::DATE, '2023-12-09 22:09:26.000000000'::TIMESTAMP),
             ('2023-12-09'::DATE, '1999-01-01 22:09:26.000000000'::TIMESTAMP)
          AS t(date1, timestamp1)
      );
+---------------------------+
| ARRAY_MAX                 |
|---------------------------|
| "2023-12-09 22:09:26.000" |
| "2023-12-09 00:00:00.000" |
+---------------------------+

더 알아보기 (Learn more)