Função de janela PERCENTILE_DISC
PERCENTILE_DISC é uma função de distribuição inversa que assume um modelo de distribuição discreta. Ela pega um valor percentil e uma especificação de classificação e retorna um elemento do conjunto fornecido.
Para determinado valor percentil P, PERCENTILE_DISC classifica os valores da expressão na cláusula ORDER BY e retorna o valor com o menor valor de distribuição cumulativa (em relação à mesma especificação de classificação) que for maior que ou igual a P.
Você pode especificar somente a cláusula PARTITION na cláusula OVER.
Sintaxe
PERCENTILE_DISC ( percentile ) WITHIN GROUP (ORDER BY expr) OVER ( [ PARTITION BY expr_list ] )
Argumentos
- percentil
-
Constante numérica entre 0 e 1. Nulls são ignorados no cálculo.
- WITHIN GROUP ( ORDER BY expr)
-
Especifica valores numéricos ou de data/hora para classificação e computação do percentil.
- OVER
-
Especifica o particionamento da janela. A cláusula OVER não pode conter uma especificação de ordenação de janela ou de quadro de janela.
- PARTITION BY expr
-
Argumento opcional que define o intervalo de registros para cada grupo na cláusula OVER.
Retornos
O mesmo tipo de dados que a expressão ORDER BY na cláusula WITHIN GROUP.
Exemplos
Os exemplos a seguir usam a tabela WINSALES. Para uma descrição da tabela WINSALES, consulte Amostra de tabela para exemplos de funções de janela.
SELECT sellerid, qty, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY qty) OVER() AS MEDIAN FROM winsales;
+----------+-----+--------+ | sellerid | qty | median | +----------+-----+--------+ | 3 | 10 | 20 | | 1 | 10 | 20 | | 1 | 10 | 20 | | 4 | 10 | 20 | | 3 | 15 | 20 | | 2 | 20 | 20 | | 2 | 20 | 20 | | 3 | 20 | 20 | | 1 | 30 | 20 | | 3 | 30 | 20 | | 4 | 40 | 20 | +----------+-----+--------+
SELECT sellerid, qty, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY qty) OVER(PARTITION BY sellerid) AS MEDIAN FROM winsales;
+----------+-----+--------+ | sellerid | qty | median | +----------+-----+--------+ | 4 | 10 | 10 | | 4 | 40 | 10 | | 3 | 10 | 15 | | 3 | 15 | 15 | | 3 | 20 | 15 | | 3 | 30 | 15 | | 2 | 20 | 20 | | 2 | 20 | 20 | | 1 | 10 | 10 | | 1 | 10 | 10 | | 1 | 30 | 10 | +----------+-----+--------+
Para encontrar PERCENTILE_DISC(0.25) e PERCENTILE_DISC(0.75) da quantidade quando particionada pelo ID do vendedor, use os exemplos a seguir.
SELECT sellerid, qty, PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY qty) OVER(PARTITION BY sellerid) AS quartile1 FROM winsales;
+----------+-----+-----------+ | sellerid | qty | quartile1 | +----------+-----+-----------+ | 4 | 10 | 10 | | 4 | 40 | 10 | | 2 | 20 | 20 | | 2 | 20 | 20 | | 3 | 10 | 10 | | 3 | 15 | 10 | | 3 | 20 | 10 | | 3 | 30 | 10 | | 1 | 10 | 10 | | 1 | 10 | 10 | | 1 | 30 | 10 | +----------+-----+-----------+
SELECT sellerid, qty, PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY qty) OVER(PARTITION BY sellerid) AS quartile3 FROM winsales;
+----------+-----+-----------+ | sellerid | qty | quartile3 | +----------+-----+-----------+ | 3 | 10 | 20 | | 3 | 15 | 20 | | 3 | 20 | 20 | | 3 | 30 | 20 | | 4 | 10 | 40 | | 4 | 40 | 40 | | 2 | 20 | 20 | | 2 | 20 | 20 | | 1 | 10 | 30 | | 1 | 10 | 30 | | 1 | 30 | 30 | +----------+-----+-----------+