- 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:
Sintaxe¶
Função de agregação
PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> )
Função de janela
PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> ) OVER ( [ PARTITION BY <expr3> ] )
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çãoPERCENTILE_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);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 | +---+-------------------------------------------------+