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