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.