카테고리:

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

MODE

expr1 내의 값에 대해 가장 빈번한 값을 반환합니다. NULL 값은 무시됩니다. 모든 값이 NULL이거나 행이 0이면 함수는 NULL을 반환합니다.

구문

집계 함수

MODE( <expr1> )
Copy

윈도우 함수

MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

인자

expr1

이 식은 가장 빈번한 값을 찾기 위해 검색되는 값을 생성합니다. 식은 다음 데이터 타입 중 하나일 수 있습니다.

  • BINARY

  • BOOLEAN

  • DATE

  • FLOAT

  • INTEGER

  • NUMBER

  • TIMESTAMP (TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ)

  • VARCHAR

  • VARIANT

이 함수는 다음 데이터 타입을 지원하지 않습니다.

  • ARRAY

  • GEOGRAPHY

  • OBJECT

expr2

데이터를 그룹으로 분할할 선택적 식입니다. 출력에는 각 그룹/파티션에 대한 가장 빈번한 값이 포함됩니다.

반환

반환된 값의 데이터 타입은 입력 식의 데이터 타입과 동일합니다.

사용법 노트

  • 가장 빈번한 값에 동점이 있는 경우(두 개 이상의 값이 서로 마찬가지로 자주 발생하고, 다른 어떤 값보다 더 자주 발생하는 경우), MODE는 해당 값 중 하나를 반환합니다.

  • 이 함수에는 DISTINCT가 지원되지 않습니다.

  • NULL이 가장 빈번한 값이더라도 함수는 NULL을 반환하지 않습니다(모든 값이 NULL인 경우가 아닌 한).

  • 윈도우 함수로 사용되는 경우:

    • 이 함수는 다음을 지원하지 않습니다.

      • OVER() 절의 ORDER BY 하위 절. 가장 빈번한 값을 선택할 때 값의 순서는 중요하지 않습니다.

      • 윈도우 프레임.

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

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

create or replace table aggr(k int, v decimal(10,2));
Copy

v 열에 대한 MODE 값을 가져옵니다. 행이 없기 때문에 함수는 NULL을 반환합니다.

select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
|    NULL |
+---------+
Copy

일부 행을 삽입합니다.

INSERT INTO aggr (k, v) VALUES
    (1, 10), 
    (1, 10), 
    (1, 10), 
    (1, 10), 
    (1, 20), 
    (1, 21);
Copy

MODE 는 가장 빈번한 값 10을 반환합니다.

select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
|   10.00 |
+---------+
Copy

행을 몇 개 더 삽입합니다.

INSERT INTO aggr (k, v) VALUES
    (2, 20), 
    (2, 20), 
    (2, 25), 
    (2, 30);
Copy

이제 가장 빈번한 두 가지 값이 있습니다. MODE 는 값 10을 선택합니다.

select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
|   10.00 |
+---------+
Copy

NULL 값이 있는 행을 삽입합니다.

INSERT INTO aggr (k, v) VALUES (3, null);
Copy

각 그룹의 MODE 값을 가져옵니다. k = 3 그룹의 값에는 NULL 값만 포함되므로 해당 그룹에 대해 반환된 값은 NULL입니다.

select k, mode(v) 
    from aggr 
    group by k
    order by k;
+---+---------+
| K | MODE(V) |
|---+---------|
| 1 |   10.00 |
| 2 |   20.00 |
| 3 |    NULL |
+---+---------+
Copy

MODE 는 OVER() 절과 함께 기본 윈도우 함수로 사용할 수도 있습니다.

select k, v, mode(v) over (partition by k) 
    from aggr 
    order by k, v;
+---+-------+-------------------------------+
| K |     V | MODE(V) OVER (PARTITION BY K) |
|---+-------+-------------------------------|
| 1 | 10.00 |                         10.00 |
| 1 | 10.00 |                         10.00 |
| 1 | 10.00 |                         10.00 |
| 1 | 10.00 |                         10.00 |
| 1 | 20.00 |                         10.00 |
| 1 | 21.00 |                         10.00 |
| 2 | 20.00 |                         20.00 |
| 2 | 20.00 |                         20.00 |
| 2 | 25.00 |                         20.00 |
| 2 | 30.00 |                         20.00 |
| 3 |  NULL |                          NULL |
+---+-------+-------------------------------+
Copy