PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como calcular o percentil no PostgreSQL


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.