- Categorias:
Funções de agregação (General) , Funções de janela
MODE¶
Retorna o valor mais frequente para os valores dentro de expr1
. Valores NULL são ignorados. Se todos os valores forem NULL, ou houver 0 linhas, então a função retorna NULL.
Sintaxe¶
Função de agregação
MODE( <expr1> )
Função de janela
MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Argumentos¶
expr1
Esta expressão produz os valores que são pesquisados para encontrar o valor mais frequente. A expressão pode ser de qualquer um dos seguintes tipos de dados:
BINARY
BOOLEAN
DATE
FLOAT
INTEGER
NUMBER
TIMESTAMP (TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ)
VARCHAR
VARIANT
Esta função não oferece suporte aos seguintes tipos de dados:
ARRAY
GEOGRAPHY
OBJECT
expr2
A expressão opcional pela qual os dados devem ser divididos em grupos. A saída contém o valor mais frequente para cada grupo/partição.
Retornos¶
O tipo de dados do valor retornado é idêntico ao tipo de dados da expressão de entrada.
Notas de uso¶
Se houver um empate para o valor mais frequente (dois ou mais valores ocorrem tão frequentemente quanto um ao outro, e mais frequentemente que qualquer outro valor), MODE retornará um desses valores.
DISTINCT não é suportado para esta função.
Mesmo que NULL seja o valor mais frequente, a função não retorna NULL (a menos que todos os valores sejam NULL).
Quando esta função é chamada como uma função de janela, ela não oferece suporte para:
Uma cláusula ORDER BY dentro da cláusula OVER.
Quadros de janela explícitos.
Exemplos¶
O código a seguir demonstra o uso da função MODE:
Criar uma tabela e dados:
create or replace table aggr(k int, v decimal(10,2));
Obtenha o valor MODE da coluna v
. A função retorna NULL porque não há linhas.
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| NULL |
+---------+
Inserir algumas linhas:
INSERT INTO aggr (k, v) VALUES
(1, 10),
(1, 10),
(1, 10),
(1, 10),
(1, 20),
(1, 21);
A função MODE retorna o valor 10
mais frequente:
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
Inserir mais algumas linhas:
INSERT INTO aggr (k, v) VALUES
(2, 20),
(2, 20),
(2, 25),
(2, 30);
Agora há dois valores mais frequentes. A função MODE seleciona o valor 10
:
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
Insira uma linha com um valor NULL:
INSERT INTO aggr (k, v) VALUES (3, null);
Obter o valor MODE para cada grupo. Observe que, como o grupo k = 3
contém apenas valores NULL, o valor retornado para esse grupo é NULL.
select k, mode(v)
from aggr
group by k
order by k;
+---+---------+
| K | MODE(V) |
|---+---------|
| 1 | 10.00 |
| 2 | 20.00 |
| 3 | NULL |
+---+---------+
A função MODE também pode ser usada como uma função de janela básica com uma cláusula 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 |
+---+-------+-------------------------------+