sql >> Base de Datos >  >> RDS >> Database

Cómo calcular la media móvil en corrimiento al rojo

El promedio móvil o el promedio móvil es una métrica útil que lo ayuda a realizar un seguimiento del valor promedio durante un período móvil (por ejemplo, el promedio de ventas de los últimos 7 días). Calcular el promedio móvil a lo largo del tiempo brinda una tendencia más razonable, en comparación con el gráfico de números diarios. Dado que no hay una función integrada para calcular el promedio móvil en Redshift, aquí está la consulta SQL para hacerlo.

Cómo calcular la media móvil en corrimiento al rojo

Estos son los pasos para calcular el promedio móvil en Redshift. Supongamos que tiene la siguiente tabla que contiene información de ventas diarias en Redshift.

# create table sales(order_date date,sale int);

# insert into sales values('2020-01-01',20),
('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),
('2020-01-05',20),('2020-01-10',20),('2020-01-06',25),
('2020-01-07',15),('2020-01-08',30),('2020-01-09',20);

# select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-01-05 |   20 |
| 2020-01-10 |   20 |
| 2020-01-06 |   25 |
| 2020-01-07 |   15 |
| 2020-01-08 |   30 |
| 2020-01-09 |   20 |
+------------+------+

Digamos que desea calcular el promedio móvil en Redshift durante los últimos 5 días. Redshift (que es básicamente Postgresql) lo hace realmente fácil con la ayuda de Redshift Window Functions. Aquí está la consulta SQL para calcular el promedio móvil de los últimos 5 días. Lo veremos en detalle a continuación.

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 ;

Si desea redondear los resultados, puede usar la función ROUND como se muestra para calcular el promedio móvil en Redshift

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;

 order_date | sale | avg_sales
------------+------+---------------
 2020-01-01 |   20 |         20.00
 2020-01-02 |   25 |         22.50
 2020-01-03 |   15 |         20.00
 2020-01-04 |   30 |         22.50
 2020-01-05 |   20 |         22.00
 2020-01-06 |   25 |         23.00
 2020-01-07 |   15 |         21.00
 2020-01-08 |   30 |         24.00
 2020-01-09 |   20 |         22.00
 2020-01-10 |   20 |         22.00

Veamos la consulta anterior en detalle. La función AVG calcula el valor promedio de venta columna. Sin embargo, cuando lo usamos junto con la función VENTANA SOBRE, calcula el valor promedio solo para la ventana que definimos.

Primero usamos ORDER BY en nuestros datos para asegurarnos de que las filas se ordenen cronológicamente. Luego definimos nuestra ventana para el promedio usando la función OVER, y mencionamos FILAS ENTRE 4 FILAS PRECEDENTES Y ACTUAL. Es decir, para cada fila, calcule el promedio de las 4 filas anteriores y la fila actual. Como el marco de la ventana cambia para cada fila, solo se usarán los 4 días anteriores y la fecha actual.

También puede agregar filtros agregando la cláusula WHERE 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;

Si desea calcular el promedio móvil en Redshift durante los últimos 30 días/1 mes, modifique la consulta anterior para usar LAS 29 FILAS ANTERIORES Y LA FILA ACTUAL

SELECT a.order_date,a.sale, 
       round(AVG(a.sale)
            OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW),2) AS avg_sales
FROM sales a;

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

Cómo calcular la media móvil en corrimiento al rojo de los últimos 3 meses

Supongamos que tiene datos de ventas mensuales en lugar de datos diarios y desea calcular el promedio móvil de los últimos 3 meses.

# create table monthly_sales(order_month date,sale int);

postgres=# insert into monthly_sales values('2019-12-01',20),
           ('2020-01-30',25),('2020-02-28',15),('2020-03-31',30),
           ('2020-04-30',20),('2020-05-31',20),('2020-06-30',25),
           ('2020-07-31',15),('2020-08-31',30),('2020-09-30',20);

postgres=# select * from monthly_sales;
 order_month | sale
-------------+------
 2019-12-01  |   20
 2020-01-30  |   25
 2020-02-28  |   15
 2020-03-31  |   30
 2020-04-30  |   20
 2020-05-31  |   20
 2020-06-30  |   25
 2020-07-31  |   15
 2020-08-31  |   30
 2020-09-30  |   20

Usamos la misma lógica para calcular el promedio móvil en Redshift, en este caso. Primer PEDIDO POR order_month columna para asegurarse de que las filas estén ordenadas cronológicamente. Luego calcule el promedio para LAS 2 FILAS ANTERIORES Y LA 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  |   20 |     20.00
 2020-01-30  |   25 |     22.50
 2020-02-28  |   15 |     20.00
 2020-03-31  |   30 |     23.33
 2020-04-30  |   20 |     21.67
 2020-05-31  |   20 |     23.33
 2020-06-30  |   25 |     21.67
 2020-07-31  |   15 |     20.00
 2020-08-31  |   30 |     23.33
 2020-09-30  |   20 |     21.67

Lectura adicional: Cómo calcular el total acumulado en corrimiento al rojo

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 Redshift, según sus requisitos.

Después de calcular el promedio móvil en Redshift, 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 de Redshift, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.