PERCENTILE_DISC calcula um valor de percentil específico. Ordena os valores de uma coluna especificada em ordem crescente e retorna o primeiro valor cuja distribuição cumulativa seja maior ou igual ao percentil especificado.
PERCENTILE_DISC é uma função de agregação e de janela.
Sintaxe
-- Aggregate function
PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>])
-- Window function
PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>]) OVER ([partition_clause] [orderby_clause])
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
|
|
Sim |
— |
Coluna que contém valores ordenáveis. |
|
|
Sim |
Constante DOUBLE |
O percentil desejado, no intervalo [0, 1]. |
|
|
Não |
Constante BOOLEAN |
Especifica se valores NULL são ignorados. Padrão: |
|
|
— |
— |
Consulte Window Functions Overview. |
Valor de retorno
Retorna o valor de percentil. O tipo de dados corresponde ao tipo de col_name.
Exemplos
Exemplo 1: Cálculo de valores de percentil ignorando NULL (comportamento padrão)
SELECT
x,
PERCENTILE_DISC(x, 0) OVER() AS min,
PERCENTILE_DISC(x, 0.5) OVER() AS median,
PERCENTILE_DISC(x, 1) OVER() AS max
FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
Resultado:
+------------+------------+------------+------------+
| x | min | median | max |
+------------+------------+------------+------------+
| c | a | b | c |
| NULL | a | b | c |
| b | a | b | c |
| a | a | b | c |
+------------+------------+------------+------------+
A ordenação exclui o valor NULL. A função ordena os três valores não NULL a, b e c em ordem crescente. Assim, o percentil 0 é a, o percentil 50 é b e o percentil 100 é c.
Exemplo 2: Cálculo de valores de percentil tratando NULL como o valor mínimo
SELECT
x,
PERCENTILE_DISC(x, 0, false) OVER() AS min,
PERCENTILE_DISC(x, 0.5, false) OVER() AS median,
PERCENTILE_DISC(x, 1, false) OVER() AS max
FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
Resultado:
+------------+------------+------------+------------+
| x | min | median | max |
+------------+------------+------------+------------+
| c | NULL | a | c |
| NULL | NULL | a | c |
| b | NULL | a | c |
| a | NULL | a | c |
+------------+------------+------------+------------+
Ao definir isIgnoreNull como false, a função classifica NULL abaixo de a, b e c. O percentil 0 passa a ser NULL e o percentil 50 muda de b para a.