Categorias:

Funções de agregação (Geral) , Funções de janela

PERCENTILE_DISC

Retorna um valor percentual baseado em uma distribuição discreta da coluna de entrada (especificada em order_by_expr). O valor retornado é aquele cuja linha tem o menor valor CUME_DIST que é maior ou igual ao percentual dado. Os valores NULL são ignorados no cálculo.

Consulte também:

PERCENTILE_CONT

Sintaxe

Função de agregação

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> )
Copy

Função de janela

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> ) OVER ( [ PARTITION BY <expr3> ] )
Copy

Argumentos

percentile

O percentual do valor que você quer encontrar. O percentual deve ser uma constante entre 0,0 e 1,0. Por exemplo, se você quiser encontrar o valor no percentual 90, deverá especificar 0,9.

order_by_expr

A expressão (tipicamente um nome de coluna) pela qual se ordenam os valores. Por exemplo, se você quiser encontrar o aluno cuja pontuação SAT em matemática está no percentual 90, então especifique a coluna que contém a pontuação SAT em matemática.

Note que esta também é implicitamente a coluna a partir da qual o valor retornado é escolhido. Por exemplo, se você classificar por pontuação SAT em matemática, então o resultado será uma das pontuações SAT em matemática. Não é possível ordenar por uma coluna e obter um valor percentual para uma coluna diferente.

expr3

Esta é a expressão opcional usada para agrupar linhas em partições.

Retornos

Retorna o valor que está no percentual especificado.

Notas de uso

  • O argumento percentile para a função deve ser uma constante.

  • DISTINCT não é suportado para esta função.

  • A função PERCENTILE_CONT interpola entre os dois valores mais próximos, enquanto a função PERCENTILE_DISC escolhe o valor mais próximo em vez de interpolar.

  • Quando usado como uma função de janela:

    • Esta função não oferece suporte para:

      • Subcláusula ORDER BY na cláusula OVER().

      • Quadros de janela.

Exemplos

O exemplo a seguir mostra os valores no 25º percentual (0,25) dentro de vários grupos:

Criar e preencher uma tabela com valores:

create or replace table aggr(k int, v decimal(10,2));
insert into aggr (k, v) values
    (0,  0),
    (0, 10),
    (0, 20),
    (0, 30),
    (0, 40),
    (1, 10),
    (1, 20),
    (2, 10),
    (2, 20),
    (2, 25),
    (2, 30),
    (3, 60),
    (4, NULL);
Copy

Executar uma consulta e mostrar a saída:

select k, percentile_disc(0.25) within group (order by v) 
  from aggr 
  group by k
  order by k;
+---+-------------------------------------------------+
| K | PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 |                                           10.00 |
| 1 |                                           10.00 |
| 2 |                                           10.00 |
| 3 |                                           60.00 |
| 4 |                                            NULL |
+---+-------------------------------------------------+
Copy