sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo calcular la media móvil en PostgreSQL

El promedio móvil o el promedio móvil le permite calcular el promedio durante un período de tiempo móvil, como los últimos 7 días. Calcular el promedio móvil a lo largo del tiempo brinda una tendencia más suave, en comparación con el seguimiento de los números diarios. Aquí está la consulta SQL para calcular el promedio móvil en PostgreSQL.

Cómo calcular la media móvil en PostgreSQL

Aquí se explica cómo calcular el promedio móvil en PostgreSQL. Digamos que tienes la siguiente tabla

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

Lectura adicional:Cómo importar un archivo CSV en PostgreSQL

Digamos que desea calcular el promedio móvil en PostgreSQL durante los últimos 5 días. PostgreSQL le permite calcular el promedio móvil con la ayuda de las funciones de ventana. Aquí está la consulta para calcular el promedio móvil en PostgreSQL durante los últimos 5 días. Lo veremos en detalle

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

En la consulta anterior, la función AVG calcula el valor promedio de venta columna. Cuando lo usamos con la función de ventana OVER, calcula el promedio solo para la ventana de tiempo definida por nosotros.

Para calcular el promedio móvil en PostgreSQL, primero ordenamos las filas cronológicamente usando la cláusula ORDER BY. Luego definimos nuestra Ventana para calcular el promedio, usando FILAS ENTRE 4 FILAS PRECEDENTES Y ACTUAL. Significa que para cada fila calcule el promedio solo para la fila actual y las 4 filas anteriores. Por lo tanto, para cada fila solo se consideran los valores de los últimos 5 días.

También puede agregar filtros y redondear valores promedio agregando la cláusula WHERE y la función ROUND en la consulta SQL anterior.

 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;

Lectura adicional:calcular el crecimiento mes a mes en PostgreSQL

Cómo calcular el promedio móvil de 30 días en PostgreSQL

De manera similar, si desea calcular el promedio móvil de 30 días en PostgreSQL, puede modificar la consulta anterior considerando 29 filas anteriores y la fila actual

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 ;

Cómo calcular el promedio móvil de 3 meses en PostgreSQL

Si tiene datos de ventas diarios y desea calcular el promedio móvil de 3 meses en PostgreSQL, puede modificar la consulta anterior considerando 89 filas anteriores y la fila actual

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 ;

Supongamos que tiene datos mensuales, en lugar de datos diarios, y desea calcular el promedio móvil de los ú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

Lectura adicional:Cómo calcular la tasa de retención en SQL

Usamos la misma lógica que la anterior para calcular el promedio móvil en PostgreSQL. Primero, ordenamos las filas cronológicamente y luego usamos la función de ventana OVER para calcular el promedio de las 2 filas anteriores. y fila actual .

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

Lectura adicional:Cómo crear una tabla dinámica en PostgreSQL

También puede agregar filtros al incluir la cláusula WHERE en la consulta SQL anterior.

 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;

Puede personalizar la consulta anterior para calcular el promedio móvil en PostgreSQL, según sus requisitos.

Después de calcular el promedio móvil en PostgreSQL, puede usar una herramienta de gráficos para trazarlo en un gráfico de líneas y compartirlo con su equipo. Este es un ejemplo de un gráfico de líneas que visualiza el promedio móvil, creado con Ubiq.

Si desea crear gráficos, paneles e informes a partir de la base de datos PostgreSQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.