Database
 sql >> база данни >  >> RDS >> Database

Как да изчислим пълзящата средна в червено изместване

Пълзяща средна или подвижна средна е полезен показател, който ви помага да следите средната стойност през движещ се период (например средни продажби за последните 7 дни). Изчисляването на плъзгащата се средна стойност във времето дава по-разумна тенденция в сравнение с начертаването на дневните числа. Тъй като няма вградена функция за изчисляване на плъзгащата се средна стойност в Redshift, ето SQL заявката за това.

Как да изчислим пълзящата средна в червено изместване

Ето стъпките за изчисляване на пълзящата средна стойност в Redshift. Да приемем, че имате следната таблица, която съдържа информация за ежедневните продажби в 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 |
+------------+------+

Да приемем, че искате да изчислите плъзгащата се средна стойност в Redshift за последните 5 дни. Redshift (което основно е Postgresql) прави това наистина лесно с помощта на Redshift Window Functions. Ето SQL заявката за изчисляване на пълзящата средна стойност за последните 5 дни. Ще го разгледаме подробно по-долу.

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 ;

Ако искате да закръглите резултатите, можете да използвате функцията ROUND, както е показано, за да изчислите текущата средна стойност в 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

Нека разгледаме по-подробно горната заявка. Функцията AVG изчислява средната стойност на продажбата колона. Въпреки това, когато го използваме заедно с функцията WINDOW OVER, тя изчислява средна стойност само за прозореца, който дефинираме.

Първо използваме ORDER BY за нашите данни, за да гарантираме, че редовете са сортирани хронологично. След това дефинираме нашия прозорец за средна стойност с помощта на функцията OVER и споменаваме РЕДОВЕ МЕЖДУ 4 ПРЕДИШНИ И ТЕКУЩ РЕД. Това означава, че за всеки ред изчислете средната стойност за предходните 4 реда и текущия ред. Тъй като рамката на прозореца се променя за всеки ред, ще се използват само предходните 4 дни и текущата дата.

Можете също да добавите филтри, като добавите клауза WHERE в горната SQL заявка.

 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;

Ако искате да изчислите плъзгащата се средна стойност в Redshift за последните 30 дни/1 месец, променете заявката по-горе, за да използвате ПРЕДИШНИ 29 РЕДА И ТЕКУЩ РЕД

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;

Бонусно четене: Как да създадете обобщена таблица в PostgreSQL

Как да изчислим пълзящата средна в червено изместване за последните 3 месеца

Да приемем, че имате месечни данни за продажбите вместо дневни и искате да изчислите плъзгащата се средна стойност за последните 3 месеца.

# 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

В този случай използваме същата логика за изчисляване на плъзгащата се средна стойност в Redshift. Първа ПОРЪЧКА ПО поръчка_месец колона, за да се гарантира, че редовете са хронологично сортирани. След това изчислете средната стойност за ПРЕДИШНИ 2 РЕДА И ТЕКУЩ РЕД

 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

Бонус за четене: Как да изчислите общия брой текущи в Redshift

Можете също да добавите филтри, като включите клауза WHERE в горната SQL заявка.

 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;

Можете да персонализирате заявката по-горе, за да изчислите плъзгащата се средна стойност в Redshift, според вашите изисквания.

След като изчислите плъзгащата се средна стойност в Redshift, можете да използвате инструмент за диаграми, за да я начертаете на линейна диаграма и да я споделите с вашия екип. Ето пример за линейна диаграма, която визуализира пълзящата средна, създадена с помощта на Ubiq.

Ако искате да създавате диаграми, табла и отчети от базата данни Redshift, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мигриране на бази данни към Azure SQL база данни

  2. Как да използвате SQL курсори за специални цели

  3. Как да филтрирате записи с агрегатна функция COUNT

  4. Грешки за отстраняване на неизправности в таблицата не е намерена

  5. ПРЕГЛЕД:Разширение SentryOne Plan Explorer за Azure Data Studio