Calcular o percentil ajuda a classificar os dados para análise, bem como calcular a mediana para um conjunto de valores. Veja como calcular o percentil no PostgreSQL usando percentile_cont função de janela. Veremos também como calcular o percentil 50, percentil 90, percentil 95 e percentil n no PostgreSQL, uma vez que são comumente usados na análise de dados.
Como calcular o percentil no PostgreSQL
Calcularemos o percentil no PostgreSQL usando percentile_cont função de janela
Digamos que você tenha a seguinte tabela sales(order_date,amount) e você deseja calcular o percentil 50.
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Bônus de leitura:Como preencher datas ausentes no PostgreSQL
Aqui está a consulta para calcular o percentil 50 no PostgreSQL. Você pode usar a mesma consulta para calcular a mediana no PostgreSQL.
postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 212.5
Na consulta acima, usamos percentile_cont função de janela que permite definir qual percentil (por exemplo, 0,5 que é o percentil 50) que você deseja calcular. Em seguida, também usamos a cláusula WITHIN GROUP para calcular o percentil dentro do grupo de venda valores. Também usamos a cláusula ORDER BY para classificar a venda valores antes de calcularmos o percentil no PostgreSQL.
Quando você usa percentile_cont window, o PostgreSQL irá interpolar o valor mediano como a média de 2 valores médios (210, 215), caso haja 2 valores médios. É por isso que retorna 212,5
Bônus de leitura:Como calcular a média móvel no PostgreSQL
Quando você puder calcular o percentil no PostgreSQL, se não quiser que o PostgreSQL interpole, mas retorne apenas o valor mais próximo, use percentile_disc função de janela em vez disso. Aqui está um exemplo
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 210
Neste caso, retornará um dos valores do meio, caso haja 2 valores do meio.
Bônus de leitura:Como importar arquivo CSV para o PostgreSQL
Como calcular o percentil 90 no PostgreSQL
Da mesma forma, você pode calcular o percentil 90 no PostgreSQL usando percentile_cont. Mudamos 0,5 para 0,9 em percentile_cont função
postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 255
Você também pode calcular 90º percentil no PostgreSQL usando percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 250
Como calcular o percentil 95 no PostgreSQL
Da mesma forma, você pode calcular o percentil 95 no PostgreSQL, usando percentile_cont
postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 277.5
Você também pode calcular o percentil 95 no PostgreSQL usando percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 300
Como calcular o percentil n no PostgreSQL
Da mesma forma, você pode calcular o enésimo percentil no PostgreSQL usando percentile_cont. Basicamente, fornecemos n/100 em percentile_cont função
postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Você também pode calcular 90º percentil no PostgreSQL usando percentile_disc
postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Depois de calcular o percentil no PostgreSQL, você pode usar uma Ferramenta de relatórios do PostgreSQL para traçar os valores percentuais junto com os valores de venda em um gráfico de linhas para analisar a diferença e também definir metas. Para isso, juntaremos o valor calculado do percentil 50 com as vendas originais tabela como mostrado abaixo
postgres=# select * from sales, (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales) temp order by order_date; order_date | sale | percentile_cont ------------+------+----------------- 2020-04-01 | 210 | 212.5 2020-04-02 | 125 | 212.5 2020-04-03 | 150 | 212.5 2020-04-04 | 230 | 212.5 2020-04-05 | 200 | 212.5 2020-04-06 | 25 | 212.5 2020-04-07 | 215 | 212.5 2020-04-08 | 300 | 212.5 2020-04-09 | 250 | 212.5 2020-04-10 | 220 | 212.5
Aqui está um gráfico de linhas que mostra as vendas diárias junto com o percentil, plotado usando Ubiq
Se você deseja criar gráficos, painéis e relatórios do banco de dados PostgreSQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.