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

Como calcular a média móvel no PostgreSQL


A média móvel ou a média móvel permitem calcular a média em um período de tempo móvel, como os últimos 7 dias. O cálculo da média móvel ao longo do tempo fornece uma tendência mais suave, em comparação com o rastreamento de números diários. Aqui está a consulta SQL para calcular a média móvel no PostgreSQL.


Como calcular a média móvel no PostgreSQL


Veja como calcular a média móvel no PostgreSQL. Digamos que você tenha a seguinte tabela
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 importar arquivo CSV no PostgreSQL

Digamos que você queira calcular a média móvel no PostgreSQL nos últimos 5 dias. O PostgreSQL permite calcular a média móvel com a ajuda de funções de janela. Aqui está a consulta para calcular a média móvel no PostgreSQL nos últimos 5 dias. Nós vamos olhar para ele em detalhes
SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;
 order_date | sale |      avg_sales
------------+------+----------------------
 2020-04-01 |  210 | 210.00
 2020-04-02 |  125 | 167.50
 2020-04-03 |  150 | 161.66
 2020-04-04 |  230 | 178.75
 2020-04-05 |  200 | 183.00
 2020-04-06 |   25 | 146.00
 2020-04-07 |  215 | 164.00
 2020-04-08 |  300 | 194.00
 2020-04-09 |  250 | 198.00
 2020-04-10 |  220 | 202.00

Na consulta acima, a função AVG calcula o valor médio de venda coluna. Quando a usamos com a função Window OVER, ela calcula a média apenas para a janela de tempo definida por nós.

Para calcular a média móvel no PostgreSQL, primeiro classificamos as linhas cronologicamente usando a cláusula ORDER BY. Em seguida, definimos nossa janela para calcular a média, usando ROWS BETWEEN 4 PRECEDING AND CURRENT ROW. Isso significa que, para cada linha, calcule a média apenas da linha atual e das 4 linhas anteriores. Portanto, para cada linha, apenas os valores dos últimos 5 dias são considerados.

Você também pode adicionar filtros e valores médios arredondados adicionando a cláusula WHERE e a função ROUND na consulta SQL acima.
 SELECT a.order_date,a.sale, 
       round(AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) 
       AS avg_sales
       FROM sales a
       WHERE condition;

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


Como calcular a média móvel de 30 dias no PostgreSQL


Da mesma forma, se você deseja calcular a média móvel de 30 dias no PostgreSQL, pode modificar a consulta acima, considerando 29 linhas anteriores e a linha atual
SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;


Como calcular a média móvel de 3 meses no PostgreSQL


Se você tiver dados de vendas diárias e quiser calcular a média móvel de 3 meses no PostgreSQL, poderá modificar a consulta acima, considerando 89 linhas anteriores e a linha atual
SELECT a.order_date,a.sale, 
       AVG(a.sale)
       OVER(ORDER BY a.order_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW)
       AS avg_sales
       FROM sales a ;



Digamos que você tenha dados mensais, em vez de dados diários, e queira calcular a média móvel dos últimos 3 meses
postgres=# create table monthly_sales(order_month date,sale int);

postgres=# insert into monthly_sales values('2019-12-01',120),
           ('2020-01-30',250),('2020-02-28',150),('2020-03-31',300),
           ('2020-04-30',200),('2020-05-31',200),('2020-06-30',250),
           ('2020-07-31',150),('2020-08-31',300),('2020-09-30',200);

postgres=# select * from monthly_sales;
 order_month | sale
-------------+------
 2019-12-01  |  120
 2020-01-30  |  250
 2020-02-28  |  150
 2020-03-31  |  300
 2020-04-30  |  200
 2020-05-31  |  200
 2020-06-30  |  250
 2020-07-31  |  150
 2020-08-31  |  300
 2020-09-30  |  200



Bônus de leitura:Como calcular a taxa de retenção no SQL

Usamos a mesma lógica acima, para calcular a média móvel no PostgreSQL. Primeiro, classificamos as linhas cronologicamente e, em seguida, usamos a função OVER window para calcular a média para 2 linhas anteriores e linha atual .
SELECT a.order_month,a.sale,
        round(AVG(a.sale)
        OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) 
        AS avg_sales
        FROM monthly_sales a ;

 order_month | sale | avg_sales
-------------+------+-----------
 2019-12-01  |  120 |    120.00
 2020-01-30  |  250 |    185.00
 2020-02-28  |  150 |    173.33
 2020-03-31  |  300 |    233.33
 2020-04-30  |  200 |    216.67
 2020-05-31  |  200 |    233.33
 2020-06-30  |  250 |    216.67
 2020-07-31  |  150 |    200.00
 2020-08-31  |  300 |    233.33
 2020-09-30  |  200 |    216.67


Bônus de leitura:Como criar uma tabela dinâmica no PostgreSQL

Você também pode adicionar filtros incluindo a cláusula WHERE na consulta SQL acima.
 SELECT a.order_month,a.sale,
        round(AVG(a.sale)
        OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) 
        AS avg_sales
        FROM monthly_sales a
        WHERE condition;

Você pode personalizar a consulta acima para calcular a média móvel no PostgreSQL, conforme suas necessidades.

Depois de calcular a média móvel no PostgreSQL, você pode usar uma ferramenta de gráficos para plotá-la em um gráfico de linhas e compartilhá-la com sua equipe. Aqui está um exemplo de um gráfico de linhas que visualiza a média móvel, criado usando o 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.