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.