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

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

Пълзяща средна или подвижна средна ви позволява да изчислите средната стойност за движещ се период от време, като например последните 7 дни. Изчисляването на плъзгащата се средна стойност във времето дава по-плавна тенденция в сравнение с проследяването на дневните числа. Ето SQL заявката за изчисляване на пълзящата средна стойност в PostgreSQL.

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

Ето как да изчислите пълзящата средна в PostgreSQL. Да приемем, че имате следната таблица

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

Бонус за четене:Как да импортирам CSV файл в PostgreSQL

Да приемем, че искате да изчислите пълзящата средна стойност в PostgreSQL за последните 5 дни. PostgreSQL ви позволява да изчислите плъзгащата се средна стойност с помощта на функциите на прозореца. Ето заявката за изчисляване на пълзящата средна стойност в PostgreSQL за последните 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 ;
 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

В горната заявка функцията AVG изчислява средната стойност на sale колона. Когато го използваме с функцията Window OVER, той изчислява средно само за определения от нас времеви прозорец.

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

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

Бонус за четене:Изчислете месечния растеж в PostgreSQL

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

По същия начин, ако искате да изчислите 30-дневна пълзяща средна стойност в PostgreSQL, можете да промените горната заявка, като вземете предвид 29 предходни реда и текущия ред

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 ;

Как да изчислим 3-месечна пълзяща средна в PostgreSQL

Ако имате дневни данни за продажбите и искате да изчислите 3-месечна пълзяща средна стойност в PostgreSQL, можете да промените горната заявка, като вземете предвид 89 предходни реда и текущия ред

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 ;

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

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

Бонус четене:Как да изчислим степента на задържане в SQL

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

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

Можете също да добавите филтри, като включите клауза 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;

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

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

Ако искате да създавате диаграми, табла за управление и отчети от базата данни PostgreSQL, можете да опитате 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. Как да направя слушател на база данни с java?

  2. Картирайте поле на точка с геометрия на PostGIS с Hibernate при Spring Boot

  3. Как работи Setseed() в PostgreSQL

  4. PostgreSQL връща набор от резултати като JSON масив?

  5. Бройте дните между 2 дати в JPA