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.