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

Como calcular a mediana no PostgreSQL


O cálculo da mediana ajuda a encontrar o valor médio nos dados e evitar ruídos devido a valores extremos. Veja como calcular a mediana no PostgreSQL usando percentile_cont já que não existe função para calcular mediana no PostgreSQL


Como calcular a mediana no PostgreSQL


Calcularemos a mediana no PostgreSQL calculando o valor do percentil 50, uma vez que não existe uma função embutida para calcular a mediana no PostgreSQL.

Digamos que você tenha a seguinte tabela sales(order_date,amount)
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 calcular a média móvel no PostgreSQL



Aqui está a consulta para encontrar a mediana, ou seja, calcular o percentil 50 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 que permite definir qual percentil (por exemplo, 0,5 que é o percentil 50) você deseja calcular. Em seguida, também usamos a cláusula WITHIN GROUP para dizer ao PostgreSQL para calcular o percentil dentro do grupo de venda valores. Também usamos a cláusula ORDER BY para dizer ao PostgreSQL para classificar a venda valores antes de calcular a mediana.

Quando você usa percentile_cont , o PostgreSQL irá interpolar o valor mediano como a média de 2 valores centrais (210.215).

Bônus de leitura:Como importar arquivo CSV na tabela PostgreSQL



Se você não quiser que o PostgreSQL interpole, mas retorne apenas o valor mais próximo, use percentile_disc em vez de. Aqui está um exemplo
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
 percentile_disc
-----------------
             210

Se você deseja calcular a mediana no PostgreSQL para cada grupo, use a cláusula GROUP BY conforme mostrado abaixo. Digamos que suas vendas tabela também contém produto coluna com nomes de produtos. Nesse caso, você pode calcular a mediana para cada produto usando a consulta a seguir.
postgres=# SELECT PRODUCT, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) 
FROM sales 
GROUP BY PRODUCT;

Bônus de leitura:Como calcular o crescimento mês a mês no PostgreSQL



Depois de calcular a mediana no PostgreSQL, você pode usar uma Ferramenta de relatórios do PostgreSQL para traçar os valores da mediana junto com os valores de venda em um gráfico de linhas para analisar a diferença. Para isso, juntaremos o valor mediano calculado 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 a mediana, plotada 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.