PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak obliczyć średnią kroczącą w PostgreSQL

Ś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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sekwencje bez przerw w PostgreSQL

  2. Różnica między językiem sql a językiem plpgsql w funkcjach PostgreSQL

  3. Przycinaj końcowe spacje za pomocą PostgreSQL

  4. Znajdź obiekty zależne dla tabeli lub widoku

  5. Formatuj miesiąc cyframi rzymskimi w PostgreSQL