Função APPROXIMATE PERCENTILE_DISC
APPROXIMATE 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. A aproximação permite que a função seja executada muito mais rápido, com um baixo erro relativo de cerca de 0,5%.
Para dado valor percentil APPROXIMATE PERCENTILE_DISC usa um algoritmo de resumo quantílico para aproximação do percentil discreto da expressão na cláusula ORDER BY. APPROXIMATE PERCENTILE_DISC retorna o valor com o menor valor de distribuição cumulativa (em relação à mesma especificação de classificação) que é maior ou igual ao percentil.
Sintaxe
APPROXIMATE PERCENTILE_DISC ( percentile ) WITHIN GROUP (ORDER BY expr)
Argumentos
- percentil
-
Constante numérica entre 0 e 1. Nulls são ignorados no cálculo.
- WITHIN GROUP ( ORDER BY expr)
-
Cláusula que especifica valores numéricos ou de data/hora para classificação e computação do percentil.
Retornos
O mesmo tipo de dados que a expressão ORDER BY na cláusula WITHIN GROUP.
Observações de uso
Se a instrução APPROXIMATE PERCENTILE_DISC incluir uma cláusula GROUP BY, o conjunto de resultados é limitado. O limite varia com base no tipo de nó e no número de nós. Se o limite for excedido, a função falha e retorna o seguintes erro.
GROUP BY limit for approximate percentile_disc exceeded.
Se você precisar avaliar mais grupos do que o limite permite, considere usar Função PERCENTILE_CONT.
Exemplos
O seguinte exemplo retorna o número de vendas, vendas globais e o quinquagésimo valor percentil para as primeiras 10 datas.
select top 10 date.caldate, count(totalprice), sum(totalprice), approximate percentile_disc(0.5) within group (order by totalprice) from listing join date on listing.dateid = date.dateid group by date.caldate order by 3 desc; caldate | count | sum | percentile_disc -----------+-------+------------+---------------- 2008-01-07 | 658 | 2081400.00 | 2020.00 2008-01-02 | 614 | 2064840.00 | 2178.00 2008-07-22 | 593 | 1994256.00 | 2214.00 2008-01-26 | 595 | 1993188.00 | 2272.00 2008-02-24 | 655 | 1975345.00 | 2070.00 2008-02-04 | 616 | 1972491.00 | 1995.00 2008-02-14 | 628 | 1971759.00 | 2184.00 2008-09-01 | 600 | 1944976.00 | 2100.00 2008-07-29 | 597 | 1944488.00 | 2106.00 2008-07-23 | 592 | 1943265.00 | 1974.00