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

Jak obliczyć wzrost z miesiąca na miesiąc w PostgreSQL

Wzrost z miesiąca na miesiąc jest użytecznym wskaźnikiem KPI w biznesie, służącym do porównywania miesięcznej sprzedaży, rejestracji itp. Miesięczny wzrost procentowy obliczymy za pomocą zapytania SQL, ponieważ nie ma dla niego funkcji PostgreSQL. Oto jak obliczyć wzrost z miesiąca na miesiąc w PostgreSQL.

Jak obliczyć wzrost z miesiąca na miesiąc w PostgreSQL

Załóżmy, że masz tabelę z miesięczną sprzedażą o nazwie sales_data(miesiąc, sprzedaż)

postgres=# create table sales_data(month int,sale int);

postgres=# insert into sales_data(month,sale) values(1,2021),
           (2,2102),(3,2150),(4,2312),(5,2425);

postgres=# select * from sales_data;
 month | sale
-------+------
     1 | 2021
     2 | 2102
     3 | 2150
     4 | 2312
     5 | 2425

Oto zapytanie SQL do obliczenia procentowego wzrostu sprzedaży z miesiąca na miesiąc w PostgreSQL.

postgres=# select month,sum(sale) as current_sale,
                lag(sum(sale), 1) over (order by month) as previous_month_sale,
                (100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
                (order by month)) || '%' as growth
                from sales_data
                group by 1
                order by 1;
 month | current_sale | previous_month_sale | growth
-------+--------------+---------------------+--------
     1 |         2021 |                     |
     2 |         2102 |                2021 | 4%
     3 |         2150 |                2102 | 2%
     4 |         2312 |                2150 | 7%
     5 |         2425 |                2312 | 4%

W powyższym zapytaniu używamy funkcji okna LAG do obliczenia sprzedaży w poprzednim miesiącu i używamy jej do obliczenia wzrostu z miesiąca na miesiąc w PostgreSQL. LAG pozwala na pobranie wiersza, który występuje przed bieżącym wierszem, ze zdefiniowanym przesunięciem, które w naszym przypadku wynosi 1.

Przeczytaj bonus: Jak utworzyć tabelę przestawną w PostgreSQL

W większości przypadków będziesz mieć dzienne dane sprzedaży zamiast miesięcznych liczb. W takim przypadku najpierw agregujemy je z miesięcznymi wartościami sprzedaży, a następnie stosujemy powyższe zapytanie SQL, aby obliczyć wzrost z miesiąca na miesiąc w PostgreSQL.

Załóżmy, że masz dzienne dane o sprzedaży.

postgres=# create sales (order_date date, sale int);

postgres=# insert into sales values('2020-01-01',20),
           ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),
           ('2020-02-05',20),('2020-02-10',20),('2020-02-06',25),
           ('2020-03-07',15),('2020-03-08',30),('2020-03-09',20);

postgres=# select * from sales;
 order_date | sale | 
------------+------+
 2020-01-01 |   20 |
 2020-01-02 |   25 |
 2020-01-03 |   15 |
 2020-01-04 |   30 |
 2020-02-05 |   20 |
 2020-02-10 |   20 |
 2020-02-06 |   25 |
 2020-03-07 |   15 |
 2020-03-08 |   30 |
 2020-03-09 |   20 |

Oto zapytanie SQL do obliczenia miesięcznego tempa wzrostu w PostgreSQL

postgres=# select month,sum(sale) as current_sale,
           lag(sum(sale), 1) over (order by month) as previous_month_sale,
           round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
           (order by month)),2) || '%' as growth
           from (select to_char(order_date,'Mon') as month,
           sum(sale) as sale
           from sales
           group by 1 ) sales_data
           group by 1
           order by 1;
 month | current_sale | previous_month_sale | growth
-------+--------------+---------------------+---------
 Feb   |           65 |                     |
 Jan   |           90 |                  65 | 38.46%
 Mar   |           65 |                  90 | -27.78%

W powyższym zapytaniu agregujemy dzienne dane sprzedaży do wartości miesięcznych (pogrubione ), a następnie użyj wcześniejszego zapytania.

Możesz także filtrować swoje dane, używając klauzuli WHERE, przed obliczeniem wzrostu z miesiąca na miesiąc w PostgreSQL.

postgres=# select month,sum(sale) as current_sale,
           lag(sum(sale), 1) over (order by month) as previous_month_sale,
           round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over 
           (order by month)),2) || '%' as growth
           from (select to_char(order_date,'Mon') as month,
           sum(sale) as sale
           from sales 
           WHERE condition
           group by 1 ) sales_data
           group by 1
           order by 1;

Po obliczeniu wzrostu z miesiąca na miesiąc w PostgreSQL, możesz użyć narzędzia do raportowania, aby wykreślić te dane na wykresie słupkowym lub pulpicie nawigacyjnym i udostępnić je swojemu zespołowi. Oto przykład wykresu słupkowego, który pokazuje procentowy wzrost z miesiąca na miesiąc, utworzony 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. Fluent NHibernate i PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns — System.NotSupportedException:określona metoda nie jest obsługiwana

  2. Kolumna PostgreSQL nie istnieje, ale faktycznie istnieje

  3. Jak Cosh() działa w PostgreSQL

  4. Aktualizacja do PostgreSQL 11 z replikacją logiczną

  5. Ściągawka wydajnościowa dla PostgreSQL