MODE¶
expr1
내의 값에 대해 가장 빈번한 값을 반환합니다. NULL 값은 무시됩니다. 모든 값이 NULL이거나 행이 0이면 함수는 NULL을 반환합니다.
구문¶
집계 함수
MODE( <expr1> )
윈도우 함수
MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
인자¶
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));
v
열에 대한 MODE 값을 가져옵니다. 행이 없기 때문에 함수는 NULL을 반환합니다.
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| NULL |
+---------+
일부 행을 삽입합니다.
INSERT INTO aggr (k, v) VALUES
(1, 10),
(1, 10),
(1, 10),
(1, 10),
(1, 20),
(1, 21);
MODE 함수는 가장 빈도가 높은 값 10
을 반환합니다.
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
행을 몇 개 더 삽입합니다.
INSERT INTO aggr (k, v) VALUES
(2, 20),
(2, 20),
(2, 25),
(2, 30);
이제 가장 빈도가 높은 값이 2개 있습니다. MODE 함수는 값 10
을 선택합니다.
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
NULL 값이 있는 행을 삽입합니다.
INSERT INTO aggr (k, v) VALUES (3, null);
각 그룹의 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 |
+---+---------+
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 |
+---+-------+-------------------------------+