A função PERCENTILE_DISC calcula um valor de percentil específico. Ela ordena os valores de uma coluna em ordem crescente e retorna o primeiro valor cuja distribuição cumulativa seja maior ou igual ao percentil especificado.
PERCENTILE_DISC atua como 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 com valores ordenáveis. |
|
|
Sim |
Constante DOUBLE |
Percentil desejado, no intervalo [0, 1]. |
|
|
Não |
Constante Boolean |
Indica se valores NULL devem ser ignorados. Padrão: |
|
|
— |
— |
Consulte Funções de janela. |
Valor de retorno
Retorna o valor do percentil. O tipo de dados corresponde ao de col_name.
Exemplos
Exemplo 1: Calcular 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 |
+------------+------------+------------+------------+
O valor NULL é excluído da ordenação. Os três valores não NULL a, b e c são classificados em ordem crescente. Assim, o percentil 0 é a, o percentil 50 é b e o percentil 100 é c.
Exemplo 2: Calcular valores de percentil tratando NULL como 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, NULL passa a ter classificação inferior a a, b e c. Consequentemente, o percentil 0 torna-se NULL e o percentil 50 muda de b para a.