Średnia ruchoma lub średnia krocząca pozwala obliczyć średnią z ruchomego okresu czasu, na przykład z ostatnich 7 dni. Obliczanie średniej ruchomej w czasie daje gładszy trend w porównaniu ze śledzeniem dziennych liczb. Oto zapytanie SQL do obliczenia średniej ruchomej w PostgreSQL.
Jak obliczyć średnią kroczącą w PostgreSQL
Oto jak obliczyć średnią ruchomą w PostgreSQL. Załóżmy, że masz poniższą tabelę
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
Przeczytaj bonus:Jak zaimportować plik CSV do PostgreSQL
Załóżmy, że chcesz obliczyć średnią ruchomą w PostgreSQL z ostatnich 5 dni. PostgreSQL pozwala obliczyć średnią kroczącą za pomocą funkcji okna. Oto zapytanie do obliczenia średniej ruchomej w PostgreSQL z ostatnich 5 dni. Przyjrzymy się temu szczegółowo
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
W powyższym zapytaniu funkcja AVG oblicza średnią wartość sprzedaży kolumna. Kiedy używamy go z funkcją Window OVER, oblicza średnią tylko dla zdefiniowanego przez nas okna czasowego.
Aby obliczyć średnią ruchomą w PostgreSQL, najpierw sortujemy wiersze chronologicznie, używając klauzuli ORDER BY. Następnie definiujemy nasze okno do obliczania średniej, używając ROWS BETWEED 4 PRECEDED A CURRENT ROW. Oznacza to, że dla każdego wiersza oblicz średnią tylko dla bieżącego wiersza i poprzednich 4 wierszy. Dlatego dla każdego wiersza brane są pod uwagę tylko wartości z ostatnich 5 dni.
Możesz także dodać filtry i zaokrąglić wartości średnie, dodając klauzulę WHERE i funkcję ROUND w powyższym zapytaniu 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; Przeczytaj dodatkowe:Oblicz wzrost z miesiąca na miesiąc w PostgreSQL
Jak obliczyć 30-dniową średnią kroczącą w PostgreSQL
Podobnie, jeśli chcesz obliczyć 30-dniową średnią kroczącą w PostgreSQL, możesz zmodyfikować powyższe zapytanie, biorąc pod uwagę 29 poprzednich wierszy i bieżący wiersz
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 ;
Jak obliczyć 3-miesięczną średnią kroczącą w PostgreSQL
Jeśli masz dzienne dane sprzedaży i chcesz obliczyć 3-miesięczną średnią ruchomą w PostgreSQL, możesz zmodyfikować powyższe zapytanie, biorąc pod uwagę 89 poprzednich wierszy i bieżący wiersz
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 ;
Załóżmy, że masz dane miesięczne zamiast dziennych i chcesz obliczyć średnią kroczącą z ostatnich 3 miesięcy
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
Przeczytaj dodatkowe:Jak obliczyć współczynnik retencji w SQL
Używamy tej samej logiki co powyżej, aby obliczyć średnią kroczącą w PostgreSQL. Najpierw sortujemy wiersze chronologicznie, a następnie używamy funkcji OVER, aby obliczyć średnią dla poprzednich dwóch wierszy i bieżący wiersz .
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
Przeczytaj bonus:Jak stworzyć tabelę przestawną w PostgreSQL
Możesz także dodać filtry, umieszczając klauzulę WHERE w powyższym zapytaniu 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; Możesz dostosować powyższe zapytanie, aby obliczyć średnią ruchomą w PostgreSQL, zgodnie ze swoimi wymaganiami.
Po obliczeniu średniej ruchomej w PostgreSQL możesz użyć narzędzia do tworzenia wykresów, aby wykreślić ją na wykresie liniowym i podzielić się nią ze swoim zespołem. Oto przykład wykresu liniowego, który wizualizuje średnią ruchomą, utworzonego za pomocą Ubiq.

Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych PostgreSQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.